以下 Java 代码使用 final
String
。
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 > > ``` 如果我们尝试重新分配声明的 `final` 类型的数组 `String` ,我们会导致错误:
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] + “ “); } } }
> 错误:无法分配给最终变量 `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
这意味着我们可以设法修改 final
类型数组 String
的值。我们能否以这种方式修改整个数组而不违反 final
的不可变规则?
原文由 Lion 发布,翻译遵循 CC BY-SA 4.0 许可协议
final
在Java中影响 _变量_,它与你分配给它的对象无关。编辑以从评论中添加: 请注意,我说 的是 object you are assigning to it 。在 Java 中,数组是一个对象。这同样适用于任何其他对象: