Visto che ti sei interessato ti dò la risposta tecnica precisa (più omeno, su alcune cose non mi sono informato ancora con estrema precisione)...avviso però che è abbastanza lunga...
allora, il confronto == tra gli oggetti confronta i puntatori...ossia, due oggetti risultano uguali con queste ocnfronto se e solo se puntano alla stessa area di memoria.. il confronto con equals, invece, confronta il valore (è il confronto di uguaglianza inteso nel senso utente)...
ora, cosa succede quando io scrivo una dichiarazione del tipo Integer i = 100? ecco, viene attivata una "java integer cache" (che ancora non so di preciso cos'è) che dovrebbe essere grande 1 byte...in pratica, avvengono quindi due comportamenti diversi:
- per i numeri compresi nell'intervallo -128;127 estremi inclusi sono memorizzati in tale cache, pertanto a valore uguale corrisponde cella di memoria uguale e quindi anche il confronto == "funziona" nel senso utente;
- per valori esterni a questo intervallo (non inseriti nella cache) il confronto == funziona invece nel modo classico per gli oggetti, e quindi il risultato del confronto non è determinabile a priori (può benissimo succedere che a valore uguale corrisponda cella di memoria uguale, ma non è assolutamente la regola,anzi il 99,9% delle volte non succede)
Comunque, come dice il tuo libro, tra oggetti
NON è mai opportuno usare il confronto ==...si
DEVE usare sempre usare l'equals! La mia era solo una curiosità!
Altra nota: l'inizializzazione
Codice:
Oggetto o = valore;
restituisce spesso un errore in fase di compilazione, è ammessa (credo) solo per i valori numerici (Integer, Real, Double ecc) e per le stringhe (String)...