La risposta è molto semplice:
In Java esistono due grandi categorie di variabili: tipi primitivi e tipi composti / oggetti.
Il confronto con l'operatore == sui tipi primitivi si comporta esattamente come ti aspetteresti.
Con i tipi composti, invece, l'operatore di uguaglianza confronta le istanze (i puntatori) e non il contenuto dell'oggetto.
Nel caso delle stringhe puoi avere stringhe distinte che risiedono in posizioni diverse in memoria, e quindi sono istanze diverse, ma hanno uguale contenuto. Il modo corretto per confrontare il contenuto di due oggetti è quindi l'uso del metodo equals() che è un metodo comune a tutti gli oggetti, perchè deriva dalla classe base Object.
|