先给出定义:
先申述一个概念:变量 = 引用 + 值(也就是:该变量初始化的内存)
可变性与不可变性:引用可变与否,值可变与否。
值的可变性取决于:值的类型是否是可变的,这取决于创建该值的类是否可变。
而引用的可变性取决于:该变量命名时是否前缀有(final)。
那么对于一个对象而言,其不可变性的程度:是什么?
一个对象的数据成员是变量,其具有引用与值。那么当声明该对象具有不可变性时,其内的数据成员的值与引用可变与否?引用可变否?值可变否?
人为定义的不可变类:可以自己进行设定,没有讨论的必要。
库中的不可变类:基本数据类型的包装类也没有讨论的必要。
Collection的不可变包装类也无讨论必要,因为在某种程度上,其是直接将地址进行纳入,不存在引用变量,其只是保证其内的元素不被添加, 而未保证其内的元素的值不被修改。
class test { public static void main(String[] args) { in A = new in(5,6); in B = new in(5,6); List<in> list = new ArrayList<>(); list.add(A); List<in> listcopy = java.util.Collections.unmodifiableList(list); for(in p : listcopy) p.print(); in C =listcopy.get(0) ; C.a = 99; for(in p : listcopy) p.print(); } } class in{ public int a; public int b; public in(int a,int b) { this.a = a; this.b = b; } public void print() { System.out.println(a+" "+b); } }