2013-07-06 5 views
1

В чем разница между этим:разница между = и новый

Object one = new Object(); 
Object two = one; 

и это:

Object one = new Object(); 
Object two = new Object(); 
two = one; 

Что бы эффект на объекте one при изменении объекта two?

+1

Попробуйте сами и посмотрите, что произойдет. – moonwave99

+1

У вашего второго фрагмента в настоящее время есть ошибка компилятора. –

+0

Ваш второй пример не компилируется, вы не можете снова создать ссылку 'two'. Возможно, вместо 'object two = one;' вы имели в виду 'two = one'? – Pshemo

ответ

15

Первый фрагмент создает один объект и дает ему два «имени» (ссылки).

Второй фрагмент кода создает два объекта, но потом «забывает» второй, и заменяет его ссылкой на первый объект:

Diagram

последняя диаграмма показывает второй объект без ссылок , На этом этапе объект становится пригодным для сбора мусора.

+0

только для диаграммы ..... –

+0

Спасибо @dasblinkenlight !!!! –

1

с помощью new вы создаете новый объект, используя =, вы просто назначаете ссылку на существующий объект.

Давайте сначала поймем, что именно означают эти утверждения.

Object one = new Object(); 

Здесь Object тип one является ссылочной переменной и new Object фактически создает объект и его называют по one.

Теперь, когда вы делаете two = one, эталонная переменная two также относится к тому же объекту, что и указанному one. то есть теперь они оба будут ссылаться на один и тот же объект.

Ваш второй фрагмент неправильный. Вы не можете создать две контрольные переменные того же типа и того же имени. Вам придется изменить это.

Object two = new Object(); 
    two = one; 

Ну, эта ссылка немного не по теме, но это, безусловно, поможет вам понять, как именно ссылки на переменные ссылаются на объекты. http://www.thejavageek.com/2013/06/22/how-do-objects-become-eligible-for-garbage-collection/

2

Объект находится в куче, является разделяемым к любому коду, который имеет опорное значение, и OBJECT содержит variable значения членов, так что это не имеет значения, какой поток или метод изменяет данные в object. Он изменен для всех.

Все переменные reference относятся к тому же Object.

Позволяет взять пример класса Rectangle.

enter image description here

Назначение объектов Ссылочные переменные -

1. Не создавать отдельные объекты.
2. Не выделяет память
3. Не Создать дубликат

more info :Assigning Object Reference Variables

0
Object one = new Object(); 
Object two = one; 

Здесь вы создали один объект и есть две ссылки на этот же объект.

Object one = new Object(); 
Object two = new Object(); 
two = one; 

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

5

Подумайте о предметах как о коробках и переменных в виде стрелок, указывающих на эти поля.

Итак, когда вы делаете

Object one = new Object(); 

вы создаете новую коробку и новую стрелку, указывающую на поле.

В то время, когда вы

Object two = one; 

вы просто создаете новую стрелку и указывая его в существующую коробку.

+0

Мне нужны эти любопытные объяснения. Thumbs up –

2

Когда вы делаете новый, jvm выделяет некоторую память этому объекту, когда вы используете «=», он дает ссылку на ту же память на переменную с левой стороны.

Значит, если вы делаете,

Object x=new Object(); 
Object x1=x; 

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

+1

Спасибо kaushal trivedi. Ваш ответ правильный, но «selig» ответил первым. Еще +1 для вас тоже. –

+1

Thats ok для меня, участие в самом сообществе - замечательная вещь. Здесь нет ничего подобного конкуренции. –

+0

Причина: Мне нравится ваш ответ, что я понял это, вы объяснили мне очень простым способом. Еще раз спасибо –

0

Эффект будет таким же.

Поскольку оба ссылочного типа, если вы:

объект два = один;

Затем оба относятся к одной и той же ячейке памяти, а изменения в одном влияют на другую.

Единственное отличие между двумя методами состоит в том, что в методе 2 вы создаете 2 экземпляра из 2-х разных объектов, но после object two = one; они будут тем же самым объектом.

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