为什么final不适用于Java中的数组?

时间:2013-12-10 04:25:00

标签: java

我尝试使用final关键字到数组,但我仍然可以更改值,为什么数组不支持final。

提前致谢

7 个答案:

答案 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)

Java中的

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