Se uno non sovrascrive il metodo hashCode
, qual è l'implementazione predefinita di hashCode
?Qual è l'implementazione predefinita di `hashCode`?
risposta
Quindi questa classe eredita hashCode
da uno dei suoi antenati. Se non lo sostituisce, viene utilizzato Object.hashCode.
Dal docs:
Per quanto ragionevolmente possibile, il metodo hashCode definito dalla classe Object non ritorno interi distinti per oggetti distinti. (Questo è tipicamente implementato convertendo l'indirizzo interno dell'oggetto in numero intero, ma questa tecnica attuazione non è richiesta dal linguaggio di programmazione JavaTM.)
Quindi predefinito attuazione è specifica JVM
Grazie, sì. Che aspetto ha l'implementazione di 'Object.hashCode()? –
@JohnThreepwood è un dettaglio di implementazione, è necessario indirizzare i documenti JVM per quello. –
http://stackoverflow.com/a/32454673/6785908 –
oggetto. hashcode() è un metodo nativo.
public native int hashCode();
Ciò significa che è implementato in codice specifico della piattaforma ed è esposto come un metodo nativo.
codiceper lo stesso sarà un codice compilato e non è disponibile withing JDK
questo existing question potrebbe fornire ulteriori informazioni.
Per impostazione predefinita, i metodi non sovrascritti vengono ereditati da Object
.
Se si guarda la documentazione del metodo, i valori di ritorno sono "[...] distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer [...])
". Il metodo in java.lang.Object
viene dichiarato come nativo, il che significa che l'implementazione viene fornita dalla JVM e può variare a seconda del proprio ambiente di runtime.
Un piccolo esempio:
Object o1 = new Object();
Object o2 = new Object();
System.out.println(o1.hashCode());
System.out.println(o2.hashCode());
stampe (usando il mio JDK6):
1660187542
516992923
rappresentazione un esagono del valore hashCode()
è utilizzato nella implementazione predefinita di toString()
a proposito: Running System.out.println(o1)
stampa qualcosa come
[email protected]
Buona spiegazione. – chipmunk
Informazioni sull'imp di default ementation puoi leggere [this] (http://blogs.tedneward.com/CommentView,guid,eca26c5e-307c-4b7c-931b-2eaf5b176e98.aspx) – CAMOBAP
l'implementazione predefinita è specifica JVM, ma in generale restituisce 'return Objects. hash (this.field1, this.field2, this.field3, ecc.); ' – NoName