我试图理解如果我将值重新分配给最终的数组元素会发生什么,这是代码:
public class XYZ {
private static final String[] ABC = {"Hello"};
public static void main(String[] args){
System.out.println(ABC[0]);
ABC[0] = " World!!!";
System.out.println(ABC[0]);
}
}
Run Code Online (Sandbox Code Playgroud)
ABC是最终数组,并且在最初的位置它"Hello"最初有,但是当我重新分配它时," World!!!"它应该超过之前的值,或者它应该给出重新分配到最终变量的编译错误.这个程序运行正常,这是输出:
run:
Hello
World!!!
BUILD SUCCESSFUL (total time: 0 seconds)
Run Code Online (Sandbox Code Playgroud)
Dic*_*ici 10
该final关键字并不意味着你不能改变对象的状态,但只有标记为基准final将保持不变.例如,你将无法做到这样的事情
final String[] ABC = {"Hello"};
ABC = new String[3]; // illegal
ABC = someOtherArray; // illegal;
ABC[0] = "World"; // legal
Run Code Online (Sandbox Code Playgroud)
何时final应用于变量,这仅表示初始化后无法重新分配.这并不妨碍对象本身的修改.在这种情况下,您正在修改数组对象.所以这很好:
ABC[0] = " World!!!";
Run Code Online (Sandbox Code Playgroud)
但这不是允许的.
ABC = new String[]{" World!!!"};
Run Code Online (Sandbox Code Playgroud)
Arrays是可变对象,除非创建时大小为 0。因此,您可以更改数组的内容。final只允许您防止将引用更改为另一个数组对象。
final String[] ABC ={"Hello"};
ABC[0]="Hi" //legal as the ABC variable still points to the same array in the heap
ABC = new String[]{"King","Queen","Prince"}; // illegal,as it would refer to another heap Object
Run Code Online (Sandbox Code Playgroud)
我建议您使用Collections.unmodifiableList(list)创建一个不可变列表。请参阅此处的 javadoc (unmodifibale 列表)。
您可以执行以下操作
String[] ABC = {"Hello"};
List<String> listUnModifiable = Collections.unmodifiableList(java.util.Arrays.asList(ABC));
Run Code Online (Sandbox Code Playgroud)
在任何时候,您都可以通过调用获取数组 listUnModifiable.toArray();
| 归档时间: |
|
| 查看次数: |
1183 次 |
| 最近记录: |