我尝试使用final关键字到数组,但我仍然可以更改值,为什么数组不支持final。
提前致谢
答案 0 :(得分:2)
因为final适用于数组引用,而不适用于内容。
您可以修改数组内容,但不能说,重新实例化数组。
答案 1 :(得分:1)
java中的数组是引用类型。声明数组final
时,您声明数组对象引用本身final
,而不是数组包含的元素。因此,虽然您无法更改数组引用,但仍可以更改数组中的各个元素。
要获得所需的效果,您必须使用Collections.unmodifiableList
或类似的东西。
答案 2 :(得分:1)
考虑这些
final int a[]={11,2};
int b[]={};
a=b;// this will compile wrong
a[1]=1;//this will compile fine
因为如果你要声明最终数组,那么这意味着数组引用不能被更改,但你显然可以更改内容
答案 3 :(得分:0)
支持 阵列,但是对于任何其他引用变量都没有区别:您可以更改变量的状态,但是您无法更改变量引用的对象,这里是数组宾语。对于数组,状态是项引用。
答案 4 :(得分:0)
final int[] test = new int[3];
test = new int[2]; //Error here
(最终适用于参考,而不是对象数据)
答案 5 :(得分:0)
如果您需要一个不可变的数据结构,List
(如果需要,可以使用ArrayList
)就是您想去的地方。如果确实需要它是一个数组,那么您需要使用getter方法创建自己的数据结构。
答案 6 :(得分:0)
final会影响变量,它与您分配给它的对象无关。
final String[] myArray = { "hi", "there" };
myArray = anotherArray; // Error, you can't do that. myArray is final
myArray[0] = "over"; // perfectly fine, final has nothing to do with it