Разгледайте кода по-долу:
DummyBean dum = new DummyBean();
dum.setDummy("foo");
System.out.println(dum.getDummy()); // prints 'foo'
DummyBean dumtwo = dum;
System.out.println(dumtwo.getDummy()); // prints 'foo'
dum.setDummy("bar");
System.out.println(dumtwo.getDummy()); // prints 'bar' but it should print 'foo'
И така, искам да копирам dum
в dumtwo
и да променя dum
, без да засягам dumtwo
. Но кодът по-горе не прави това. Когато променя нещо в dum
, същата промяна се случва и в dumtwo
.
Предполагам, че когато казвам dumtwo = dum
, Java копира само референцията. Така че има ли начин да създам ново копие на dum
и да го присвоя на dumtwo
?
Ето едно прилично обяснение на clone()
, ако се наложи да го използвате...
За да направите това, трябва да клонирате обекта по някакъв начин. Въпреки че Java разполага с механизъм за клониране, не го използвайте, ако не се налага. Създайте метод за копиране, който да свърши работата вместо вас, и след това го направете:
dumtwo = dum.copy();
Тук има още няколко съвета за различни техники за осъществяване на копиране.