juste un petit detail,
si vous trouvez que le comportement du == est bizare c'est a cause du lazy update :
en fait, pour optimiser, la jvm ne recopie pas systematiquement les chaines de cara donc si a l'initialisation on a une chaine qui est identique a une autre, la reference de la 2eme pointera vers la 1ere. Faire le test avec == marche donc dans ce cas. Cependant, des qu'on effectue une modif sur une des chaines, la recopie est faite et les deux references deviennent differentes meme si par la suite les chaines de caracteres redevienent identiques.
Bon c'est ptetre pas tres clair mais la conclusion est qu'il faut toujours utiliser le equals pour comparer la valeur et == pour les references (c'est ce qui a ete dit d'ailleurs plus haut )