使Java中的数组内容不可修改

时间:2013-11-01 02:38:37

标签: java arrays

我正在阅读“Effective Java”,它说我们可以使用下面的代码使数组的内容不可修改:

private static final Thing[] PRIVATE_VALUES = { ... };
public static final Thing[] values() {
   return PRIVATE_VALUES.clone();
}

但是,我们知道两个数组(原始数组和复制数组)对每个元素都有相同的引用。所以上面的方法如何避免修改数组的内容。我真的很怀疑。可以有人帮忙我。非常感谢。

1 个答案:

答案 0 :(得分:1)

无法使数组的元素无法修改。这就是为什么有些人将不安全的方法传递给数组的clone()或将元素作为不可修改的List传递。

Object[] original = new Object[]{ ... some objects ... }

Object[] clone = original.clone()

originalclone现在是两个不同的容器,其中包含相同的对象(内容)。

即使original元素发生了变化,clone中的元素(每个数组索引中的内容)也不会立即更改。但是,数组中引用的对象(每个数组元素中的对象)仍然可以更改其状态。

现在,如果你的数组都是原语:

int[] original = {1,2,3,4,5}

int[] clone = original.clone()

然后original中的元素不可修改且不可变。