长度非0的数组是可变的

今天看到一篇文章,上面提到一句话:长度非0的数组是可变的。

为什么是非0才不可变,因为数据的长度是固定的,非0可变也就是按时是数组中的元素可变。

昨天看了廖雪峰的java基础,里面就有提到基本类型的数组,这个数组本身的类型是引用类型。

也就是 int[] a = {1,2};

这个a变量,它的类型是引用类型。

实际上我们可以通过a[0]之类的操作来改变定义为final的数组的元素。只不过是不能改变a的指向。

也就是

final int[] a = {1,2};

int[] b = {3,4};

a = b; // 这个是错误的

a[0] = 10; // 这个是可以操作的

元素是可以任意被改变的,要想数组不可变,其实可以加一个代码,

private static final String[] aArray = {"a", "b", "c"};
    public static final List<String> aList = Collections.unmodifiableList(Arrays.asList(aArray));

但即使是这样,只是对元素的修改不可以了,对于该元素的属性还是可以修改的。

@Data
public class A {
    private String a;
    private static final A[] aArray = {new A()};
    public static final List<A> aList = Collections.unmodifiableList(Arrays.asList(aArray));

    public static void main(String[] args) {
        System.out.println(aList); // [A(a=null)]
        aList.get(0).setA("aaa");  // 是可以的
        System.out.println(aList); // [A(a=aaa)]
    }
}
原文地址:https://www.cnblogs.com/woyujiezhen/p/14283672.html