2012-01-12 2 views
4

Рассмотрим следующий код:Java - Создание двух ссылок на тот же объект

Object object = new Object(); 
objectList.add(object); 
objectListTwo.add(object); 

Есть ли способ, чтобы получить оба массива, чтобы указать на тот же объект, таким образом, что при изменении object в одном массиве, его изменения в другом?

Благодарим за помощь!

EDIT: Поворачивается, мой код выше делает именно это. Проблема была в другом месте моего кода. Мои извинения за мое замешательство ...

+5

Ваш код уже делает это. –

+0

На самом деле, у вас есть три копии ссылки на объект «объект» - первый. –

ответ

4

Зависит от того, что вы подразумеваете под «изменением». Если вы имеете в виду изменение, как при вызове сеттеров и мутации объекта, то эти изменения наблюдаются. Если вы имеете в виду изменение, как при полном перераспределении или перезаписи переменной (или ссылки), эти изменения не соблюдаются.

Проще говоря, скажем, у вас есть один объект, один массив.

Foo foo = new Foo(); 
Foo[] foos = new Foo[1]; 
foos[0] = foo; 

Элемент в массиве и переменная, каждая ссылка которой совпадает с Foo.

foo.setBar(7); 
int bar = foos[0].getBar(); // will get 7 

Изменение объекта, на которое ссылается foo, наблюдается внутри массива.

foo = new Foo(); 
foo.setBar(94); 
bar = foos[0].getBar(); // will not get 94 

Это изменение не наблюдается внутри массива, поскольку foo был переназначен. Его сеттер теперь полностью мутирует другой объект.

+0

Что вы подразумеваете под «переназначением или перезаписью объекта»? –

+0

Спасибо за разъяснение! Оказывается, что корень моей проблемы был в другом месте моего кода. Но ваш ответ определенно прояснил ситуацию. – williamg

+0

@Oli, текст теперь неясен? Вы, видимо, поймали меня до некоторых образцов кода. –

6

Оба списка указывают на один и тот же объект. Java передает ссылку на объект (по значению).

+2

Неверно - Java проходит * все * по значению. В случае не-примитивов передаваемая вещь не является объектом; это ссылка на объект. См. Http://c2.com/cgi/wiki?JavaPassesByValue – duffymo

+0

@duffymo touchhe. – paislee

+0

Java не передает объекты, и он не передает объекты по ссылке. http://blog.tmorris.net/java-is-pass-by-value/ –

Смежные вопросы