• [^] # Re: Les vrais ajouts

    Posté par . En réponse au journal Java 7 est dispo !. Évalué à 2.

    La comparaison des String est effectivement casse-gueule en Java.

    L'opérateur = compare des types de base (int, double, ...).
    La méthode equals (présente dans la classe Object) sert à comparer des objets.

    En l’occurrence, String est un objet.

    Si tu utilise = pour comparer des String, tu compares leur référence, pas le contenu.
    Si tu utilise equals, tu compares bien le contenu.

    Alors parfois, le = fonctionne. Pourquoi ? L'explication est dans la doc) de String : un pool de String est maintenu par la classe. Quand tu en crée un nouveau est qu'il est dans le pool, alors c'est la même référence qui est utilisée. Sinon, c'est un autre objet.

    (voir StackOverflow pour plus de détail).

    Notamment : "a" == "a" peut retourner true ou false selon que "a" fait partie du pool ou pas
    new String("a") == new String("a") retourne toujours false (deux objets différents).

    A noter que dans des langages de scripts comme Groovy, l'opérateur == est surchagé pour toujours faire .equals. En groovy, donc : new String("a") == new String("a") retourne toujours true.