Ça, la plupart du temps c'est une aberration. Mais en résumé, il y a deux objets String dans cette ligne.
D'abord l'objet String créé à la compilation du fait d'avoir utilisé le littéral "qqch".
Ensuite, un autre objet String, créé au runtime, qui contient aussi le texte qqch, et qui est créé du fait du mot-clé "new."
En général ça ne sert à rien. On devrait logiquement faire String x = "qqch";
Quand on appelle le constructeur d'une classe, avec "new" donc, on crée
toujours un nouvel objet. En fait c'est exactement ce que veut dire un constructeur. Mais on n'a pas toujours besoin de le faire. Avec les String c'est même rare.
L'intérêt de faire new String("qqch") est mince. En gros, ça crée un objet String, qui contient le texte qqch, mais qui renvoie false si on le compare à "qqch" ou à n'importe quel objet autre que lui-même.
Pour illustrer :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| String s1 = "qqch";
String s2 = new String("qqch");
if(s1 == "qqch") {
System.out.println("s1 et 'qqch' sont identiques.");
}
if(s2 == "qqch") {
System.out.println("s2 et 'qqch' sont identiques.");
}
if(s1 == s2) {
System.out.println("s1 et s2 sont identiques.");
}
if("qqch" == "qqch") {
System.out.println("'qqch' et 'qqch' sont identiques.");
}
if(s1.equals("qqch")) {
System.out.println("s1 et 'qqch' sont égaux.");
}
if(s2.equals("qqch")) {
System.out.println("s2 et 'qqch' sont égaux.");
}
if(s1.equals(s2)) {
System.out.println("s1 et s2 sont égaux.");
} |
On voit que s1 et s2 contiennent la même chose, mais sont des objets différents. De plus, s1 est l'objet créé à la compilation avec le littéral "qqch".
Partager