Java不可修改的数组

Emi*_*mil 12 java arrays unmodifiable

final Integer[] arr={1,2,3};
arr[0]=3;
System.out.println(Arrays.toString(arr));
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的代码,看看是否可以重新分配最终数组的变量[ ans:它可以].我理解通过最终的Integer []数组,这意味着我们不能分配另一个Integer []的实例,而不是我们拥有的那个最初分配.我想知道是否有可能使数组变量也不可修改.

And*_*ner 23

据我所知,这是不可能的.

然而,存在一种方法Collections.unmodifiableList(..),其创建例如a的不可修改的视图List<Integer>.

如果您想保证即使不可修改的视图列表的创建者也无法修改底层(可修改的)列表,请查看Guava的ImmutableList.

  • 这是使用集合而不是数组的另一个好理由. (4认同)
  • @SkipHead取决于您编程的目标.并非每个Java程序都在某个大型主机上的Java EE容器中运行. (3认同)

Bri*_*new 9

不可以.可以更改阵列的内容.你不能阻止这一点.

集合有各种创建不可修改集合的方法,但不提供数组.


小智 5

final关键字只能防止更改arr引用,即您不能:

final int[] arr={1,2,3}; 
arr = new int[5]; 
Run Code Online (Sandbox Code Playgroud)

如果arr所指的对象是可变对象(如数组),则不会阻止您对其进行修改。

唯一的解决方案是使用不可变对象。