Pour être précis :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| import static java.lang.System.out;
public class Machin
{
public static void main(String[] arguments) {
int int1 = 0;
int int2 = 0;
out.println(int1 == int2); // true
Integer integer1 = new Integer(0);
Integer integer2 = integer1;
out.println(integer1 == integer2); // true
integer2 = new Integer(0);
out.println(integer1 == integer2); // false
// Unboxing automatique.
int1 = integer1;
int2 = integer2;
out.println(int1 == int2); // true
// Certains types wrappers font de l'optimisation.
integer1 = Integer.valueOf(0);
integer2 = Integer.valueOf(0);
out.println(integer1 == integer2); // true
// Jusqu'à un certain point...
integer1 = Integer.valueOf(128);
integer2 = Integer.valueOf(128);
out.println(integer1 == integer2); // false
// Le boxing automatique n'est que du sucre syntaxique pour faire la même chose.
integer1 = 0;
integer2 = 0;
out.println(integer1 == integer2); // true
// Idem.
integer1 = 128;
integer2 = 128;
out.println(integer1 == integer2); // false
String string1 = new String("toto");
String string2 = new String("toto");
out.println(string1 == string2); // false
string1 = new String("toto");
string2 = string1;
out.println(string1 == string2); // true
// Sorte de boxing qui existait avant Java 1.5 pour les valeurs littérales.
string1 = "toto";
string2 = "toto";
out.println(string1 == string2); // true
}
} |
La seule règle pertinente reste cependant de savoir ce qu'on veut comparer. Avec les types primitifs, seule leur valeur est comparable. Avec tous les autres, c'est à dire les références d'objets, on peut comparer leur identité (opérateur ==) ou bien leur contenu (méthode
equals). Typiquement, lorsqu'on clone un objet, on obtient un nouvel objet identique (identité différente), mais de même contenu. Le C++ est peut-être plus explicite à ce sujet puisqu'on voit bien la différence entre un et un "string *", un "string &" et un "string" (ce dernier n'existant pas en Java où seuls les types primitifs sont accessibles par valeur).
Partager