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.
小智 5
final关键字只能防止更改arr引用,即您不能:
final int[] arr={1,2,3};
arr = new int[5];
Run Code Online (Sandbox Code Playgroud)
如果arr所指的对象是可变对象(如数组),则不会阻止您对其进行修改。
唯一的解决方案是使用不可变对象。