关于不可变性与可变性的“嵌套”联想

先给出定义:

先申述一个概念:变量 = 引用 + 值(也就是:该变量初始化的内存)

可变性与不可变性:引用可变与否,值可变与否。

值的可变性取决于:值的类型是否是可变的,这取决于创建该值的类是否可变。

而引用的可变性取决于:该变量命名时是否前缀有(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);
    }
}

原文地址:https://www.cnblogs.com/zqybegin/p/12658360.html