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] + " ");
}
}
}
Run Code Online (Sandbox Code Playgroud)
它在控制台上显示以下输出.
I can never change
Run Code Online (Sandbox Code Playgroud)
以下代码也毫无疑问.
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] + " ");
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,注释行会导致指定的错误,因为我们正在尝试重新分配声明final的类型数组String.
以下代码怎么样?
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] + " ");
}
}
}
Run Code Online (Sandbox Code Playgroud)
它显示I can always change意味着我们可以设法修改final类型数组的值String.我们能否以这种方式修改整个阵列而不违反规则final?
Bri*_*ach 90
final在Java中影响变量,它与您分配给它的对象无关.
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
Run Code Online (Sandbox Code Playgroud)
编辑以添加注释:请注意,我说的是您要分配给它的对象.在Java中,数组是一个对象.同样的事情适用于任何其他对象:
final List<String> myList = new ArrayList<String>():
myList = anotherList; // error, you can't do that
myList.add("Hi there!"); // perfectly fine.
Run Code Online (Sandbox Code Playgroud)
She*_*zad 16
你错误地解释了最终的实现.final适用于数组对象引用,这意味着一旦启动它,引用就永远不会改变,但可以填充其自身的数组."它没有违反规则"你只指定了一个关于参考变化的规则,它正在相应地工作.如果你想要值也应该永远不会改变你应该去不可变列表即
List<String> items = Collections.unmodifiableList(Arrays.asList("I", "can", "never", "change"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59372 次 |
| 最近记录: |