-1

如果一个方法从特定的数组索引返回一个对象,然后这个对象被修改,这个对象是只在本地修改还是数组中的对象也被修改?

有没有办法强制每个案例?

4

2 回答 2

4

数组中的对象也将被修改。它之所以这样工作,是因为尽管 Java 是按值传递的,但它传递的是对象引用的值。所以最后数组有一个引用的副本,任何得到的结果都有一个引用的副本。当您修改对象本身时,您正在修改他们都“指向”的东西。所以双方都看到了变化。

使这不正确的唯一方法是在返回之前制作元素的副本。

或者,如果您使对象不可变,则不必担心这些细节,因为您一开始就无法更改对象。

于 2014-04-24T20:55:30.530 回答
1

如果您希望对象不被修改,您需要制作对象的防御性副本

于 2014-04-24T20:56:21.380 回答