3

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

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

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

4

1 回答 1

2

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

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

Object[] clone = original.clone()

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

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

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

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

int[] clone = original.clone()

那么里面的元素original是不可修改的,也是不可变的。

于 2013-11-01T02:42:14.187 回答