2014-04-24 9 views
-1

Если метод возвращает объект из определенного индекса массива, а затем этот объект изменяется, будет ли этот объект изменен только локально или будет изменен объект в массиве?Mutability массивов в java

Есть ли способ заставить каждый случай?

+2

Просто попробуйте, сделав простую программу. – Braj

+0

1) объект * is * сам, и; 2) объект * не * клонируется/дублируется во время назначения или используется в качестве аргумента метода. (Этих двух частей информации должно быть достаточно, чтобы ответить на вопрос, даже не отвлекаясь на контрольные значения.) – user2864740

ответ

4

Объект в массиве также будет изменен. Он работает таким образом, потому что, хотя Java проходит по значению, он передает значение объекта с ссылкой. Таким образом, в конце массив имеет копию ссылки, и все, что получает результат, имеет копию ссылки. Когда вы изменяете сам объект, вы изменяете то, что они оба «указывают» на. Таким образом, оба видят изменение.

Единственный способ сделать это неправдой - сделать копию элемента перед его возвратом.

В качестве альтернативы, если вы сделаете свой объект неизменным, вам не придется беспокоиться об этих деталях, потому что вы не можете не изменить.

1

Вам нужно сделать defensive copy объекта, если вы хотите, чтобы он не может быть изменен