Bonjour

J'ai la classe suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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