2014-11-24 3 views
4

Я действительно растерялся о том, в чем разница между методом .clone() или просто помещая знак = между объектами, пытаясь клонировать его.В чем разница между клонированием объекта с помощью метода .clone() и = sign?

Thank you.

+0

Возможный дубликат [Как скопировать объект в Java?] (Http://stackoverflow.com/questions/869033/how-do-i -copy-an-object-in-java) – Joe

+1

Возможно ли дублирование означает, что он должен быть проголосован? – user3437460

+1

Да, сэр, я просто новичок на этом сайте, но я по-прежнему ценю то, что получаю. – Robert

ответ

13

Если вы создаете новую собаку:

Dog a = new Dog("Mike"); 

, а затем:

Dog b = a; 

Вы бы один Dog и две переменные, которые ссылаются на один и тот же Dog. Поэтому делать:

a.putHatOnHead("Fedora"); 

if (b.hasHatOnHead()) { 
    System.out.println("Has a hat: " + b.getHatName()); 
} 

Напечатает, что у собаки есть шляпа Fedora, потому что a и b ссылки та же собака.

Вместо этого делать:

Dog b = a.clone(); 

Теперь у вас есть две собаки клонов. Если вы положите шляпу на каждую собаку:

a.putHatOnHead("Rayden"); 
b.putHatOnHead("Fedora"); 

У каждой собаки будет своя шляпа.

+0

Спасибо за эту четкую инструкцию, теперь все стало яснее :) – Robert

0

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

+0

Спасибо, сэр :) – Robert

1

Знак = является оператором присваивания в java. Имея a = b означает «Я присваиваем переменной a значение переменной b. Если b является объектом, то a = b делает a точку на объект, который b который указывает. Он делает не скопировать объект, не клонировать его.

Если вы хотите, чтобы клонировать объект, вы должны либо сделать это вручную (некрасиво), или сделать класс, который должен быть Клонируемыми реализовать Clonable затем вызвать clone().

преимущества на clone() над «уродливым» способом является то, что с clone() он является разработчиком класс, который должен быть клонирован, который определяет, как клонирование должно быть выполнено, чтобы гарантировать, что копия является законной и рабочей копией.

+0

Спасибо, сэр :) – Robert

3

Позвольте мне объяснить вам:

Object obj = new Object(); //creates a new object on the heap and links the reference obj to that object 

Случай 1:

Object obj2 = obj; //there is only one object on the heap but now two references are pointing to it. 

Случай 2:

Object obj2 = obj.clone(); //creates a new object on the heap, with same variables and values contained in obj and links the reference obj2 to it. 

для получения дополнительной информации о методе клонирования, вы можете обратиться в Java api

+0

Спасибо за ваши усилия, теперь я с комфортом могу сказать, что понял всю концепцию :) – Robert

+0

anytime dude:) –

-3

= создает новую ссылку на тот же объект. clone() создает новый физический объект с теми же атрибутами, что и предыдущий

+3

Если у вас есть вопросы, ответьте, пожалуйста, не отвечайте, если вам нечего добавить. Все, что вы говорите, уже включено в предыдущие ответы. – klutt

+2

_ @ AnmolParikh_ Чтобы сообщить вам об этом. Ваш ответ в настоящее время обсуждается в Meta Stack Overflow: https://meta.stackoverflow.com/questions/349781/how-do-i-vote-late-answers-when-there-are-much-better-answers –