为什么声明数组最终结果不会使其在Java中不可变?
2022-09-03 09:02:06
为什么声明数组最终结果不会使其在Java中不可变?宣布某些最终内容不意味着它不能被更改吗?
从与不可变数组相关的问题中可以清楚地看出,声明数组最终值并不能使其不可更改。
以下是可能的。
final int[] array = new int[] {0, 1, 2, 3};
array[0] = 42;
我的问题是:那么在这里宣布最终结果的功能是什么?
为什么声明数组最终结果不会使其在Java中不可变?宣布某些最终内容不意味着它不能被更改吗?
从与不可变数组相关的问题中可以清楚地看出,声明数组最终值并不能使其不可更改。
以下是可能的。
final int[] array = new int[] {0, 1, 2, 3};
array[0] = 42;
我的问题是:那么在这里宣布最终结果的功能是什么?
final
只是关于由它标记的引用;Java中没有不可变数组这样的东西。当你说
private final int[] xs = new int[20];
你不会被允许说
xs = new int[10];
后来。这就是全部内容。更一般地说,确保对象是不可变的通常是一项艰巨的工作,并且充满了一系列微妙之处。语言本身并没有开箱即用地为这一目的提供太多帮助。final
final
表示您无法更改引用 - 即您无法为该字段分配另一个数组。
“不可变”意味着您无法更改数组的内容 - 对此没有影响。final
如代码所示,您可以为数组的某个元素赋值,这不会更改对数组的引用