Mon clonage n'est pas correct ?
Bonjour
J'ai la classe suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public class Classe1 implements Cloneable {
private String name = null;
@Override
protected Object clone() throws CloneNotSupportedException {
Classe1 clone = (Classe1) super.clone();
clone.name = this.name;
return clone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
} |
Et le test suivant :
import junit.framework.TestCase;
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class Classe1Test extends TestCase {
public void testClone() {
try {
Classe1 cla = new Classe1();
cla.setName("TOTO");
Classe1 clone = (Classe1) cla.clone();
assertNotSame(cla.getName(), clone.getName());
}
catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
} |
Le test assertNotSame(cla.getName(), clone.getName()); ne passe pas car apparement l'adresse de la propriétés semble être la même.
pourtant il me semblait qu'en faisant clone.name = this.name; dans le clone, du fait que la classe String est immuable, un nouvel objet serait créé, donc un nouvel adressage.
Ce n'est pas le cas ici ? Pourriez vous éclairer ma lanterne ?
Merci d'avance