Bonjour à tous,

Je viens vers vous pour m'éclairer sur un point qui me semble étrange.
Je précise que je travaille avec Tiger (1.5)

Avec le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
String s1 = "s";
String s2 = "s";
System.out.println(s1 == s2);
"true" s'affiche.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
String s1 = new String("s");
String s2 = new String("s");
System.out.println(s1 == s2);
Cette fois j'ai un false qui s'affiche

Pensant que c'etait un mécanisme propre aux String, j'ai décidé de tester avec un Object qui permet l'autoboxing à savoir la classe Integer. Le résultat est le même :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
Integer i1 = 1;
Integer i2 = 1;
System.out.println(i1 == i2);
"true" s'affiche.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(i1 == i2);
"false" s'affiche

Je pensais que "==" comparer les variables d'instances de s1 et s2.
Quelqu'un peut m'expliquer le mécanisme qui justifierait ce comportement?

Merci d'avance.

Bien Cordialement,