为什么我可以在Java中编辑一个final数组的内容?
为什么我可以在Java中编辑一个final数组的内容?
以下的Java代码使用了一个String的final数组。
final public class Main { public static final String[] CONSTANT_ARRAY = {"I", "can", "never", "change"}; public static void main(String[] args) { for (int x = 0; x < CONSTANT_ARRAY.length; x++) { System.out.print(CONSTANT_ARRAY[x] + " "); } } }
在控制台上显示以下输出。
I can never change
如果我们尝试重新分配已声明的String类型的final数组,会导致错误:
final public class Main { public static final String[] CONSTANT_ARRAY = {"I", "can", "never", "change"}; public static void main(String[] args) { CONSTANT_ARRAY={"I", "can", "never", "change"}; //Error - can not assign to final variable CONSTANT_ARRAY. for (int x = 0; x < CONSTANT_ARRAY.length; x++) { System.out.print(CONSTANT_ARRAY[x] + " "); } } }
错误:无法分配给final变量CONSTANT_ARRAY。
然而,以下代码可以运行:
final public class Main { public static final String[] CONSTANT_ARRAY = {"I", "can", "never", "change"}; public static void main(String[] args) { CONSTANT_ARRAY[2] = "always"; //Compiles fine. for (int x = 0; x < CONSTANT_ARRAY.length; x++) { System.out.print(CONSTANT_ARRAY[x] + " "); } } }
它显示
I can always change
这意味着我们可以成功修改String类型的final数组的值。我们能否通过这种方式修改整个数组而不违反final的不可变规则呢?