判断是否为不可变类,对数组对象有点迷了

希望能详细解答一下,自己试了几种方法都没能改变(可能不全吧)

下面的类是不可变类吗?

class A {
    private int[] values;
    
    public int[] getValues() {
        return values;
    }
}

你加一个set方法
public void setValues(int[] values){
this.values = values;
}
调用这个set方法就能改变values的值了。

如何设计不可变类?
(1)类声明为final,不可以被继承。
(2)所有成员变量定义为私有和final(private final)。
(3)不提供改变成员变量的方法。
(4)通过构造器初始化成员,若构造器传入引用数据类型需要进行深拷贝。
你这属于第3种,没提供改变成员变量方法


class A {
    private int[] values;
    
    public A(int[] s) {
        values = s;
    }
    
    public int[] getValues() {
        return values;
    }
    
}

不过发现建一个如上的构造函数是可以通过返回的数组的引用来改变values
问题里面的应该是不可变类,没有初始化那个数组

img


对数组进行初始化是可以通过返回的数组引用改变数据
没初始化数组是null值就不行