为什么声明数组最终结果不会使其在Java中不可变?

2022-09-03 09:02:06

为什么声明数组最终结果不会使其在Java中不可变?宣布某些最终内容不意味着它不能被更改吗?

与不可变数组相关的问题中可以清楚地看出,声明数组最终值并不能使其不可更改。

以下是可能的。

final int[] array = new int[] {0, 1, 2, 3};
array[0] = 42;

我的问题是:那么在这里宣布最终结果的功能是什么?


答案 1

final只是关于由它标记的引用;Java中没有不可变数组这样的东西。当你说

private final int[] xs = new int[20];

你不会被允许说

xs = new int[10];

后来。这就是全部内容。更一般地说,确保对象是不可变的通常是一项艰巨的工作,并且充满了一系列微妙之处。语言本身并没有开箱即用地为这一目的提供太多帮助。final


答案 2

final表示您无法更改引用 - 即您无法为该字段分配另一个数组。

“不可变”意味着您无法更改数组的内容 - 对此没有影响。final

如代码所示,您可以为数组的某个元素赋值,这不会更改对数组的引用