Questo è uno degli errori più comuni che si commette quando si utilizza Java da poco tempo. Vediamo un esempio per chiarire il concetto. Supponiamo di istanziare due oggetti di tipo String contenenti entrambi il valore : “Pippo”:
String s = new String(“Pippo”);
String s1 = new String(“Pippo”);
A questo punto se, in qualche parte del codice, si utilizzerà il blocco:
if(s == s1)
{
…
// NON verrà eseguita questa parte di codice
}
else
{
…
// Verrà eseguita questa parte di codice
}
ci si accorgerà che le istruzioni che verranno eseguite saranno quelle all’interno dell’else. Come mai? La ragione è legata al fatto che l’operatore “==” esegue la comparazione tra le variabili reference che tengono traccia dei due oggetti e non tra i valori contenuti dagli oggetti stessi. Questo concetto è molto importante ed è valido per tutte le tipologie di oggetti. Per i tipi primitivi, invece, la comparazione è normalmente effettuata tramite l’operatore “==”.