==
confronta gli indirizzi degli oggetti/corde/qualsiasi cosa
.equals()
progettato per utilizzare stato interno degli oggetti per il confronto.
Quindi:
new Object() == new Object() => false
- due oggetti separati in zone diverse di memoria.
new String("a") == new String("a") => false
- la stessa situazione: due indirizzi separati per gli oggetti stringa.
new String("a").equals(new String("a")) => true
- gli indirizzi sono diversi, ma Java prenderà uno stato oggetto ('a') e confrontato con altri stati oggetto ('a') li troverà uguali e segnaleranno true.
Utilizzando il metodo equals() è possibile codificare il confronto in qualsiasi modo sia corretto per il proprio programma.
intern()
è una storia un po 'diversa. È inteso per restituire lo stesso oggetto (indirizzo) per la stessa sequenza di caratteri. È utile ridurre la quantità di memoria richiesta quando si costruiscono le stesse stringhe più volte.
new String("aaa").intern()
cercherà nella memoria della macchina se mai qualcuno ha creato una stringa "aaa" prima e restituirà la prima istanza della stringa ... Se non è stata trovata la stringa, quella corrente verrà inserita come prima e tutta "aaa" .intern() e new String("aaa").intern()
e ("a"+"aa").intern()
restituiranno tale "prima" istanza.
Attenzione: "aaa".intern()
non è un'operazione molto veloce e se si internerà tutte le stringhe - si risparmia un po 'di memoria, ma si perderanno un bel po' di lavoro della CPU.
fonte
2012-10-21 21:09:20
In aggiunta alla classe 'Object', la stessa cosa accade con una classe che creiamo. Perché? Usa il metodo di classe 'Object'? – Tiny
@Tiny Se non si esegue l'override di 'equals' nella classe, erediterà il metodo' equals' di Object. – assylias
@Tiny Perché ogni classe discende da Object. Dovresti sovrascrivere i metodi 'equals()' e 'hashCode()' per le tue classi, altrimenti useranno quelli della classe 'Object'. – ppeterka