2013-01-25 11 views
5

Eventuali duplicati:
What’s the implementation of hashCode in java Object?Come viene implementato il metodo hashCode() nella classe Object?

Mentre stavo dando un'occhiata agli classe Object, ho trovato che ci sia solo una dichiarazione del metodo hashCode(). Dov'è la parte di implementazione? Se non c'è implementazione, come fa il metodo hashCode() a restituirmi un risultato?

+1

Coloro che desiderano sottopormi alla domanda, si preoccupano di condividere una risposta per favore. Grazie –

risposta

10

È implementato nel codice nativo. Per quanto riguarda l'implementazione, è un po 'più complicato: puoi modificare l'implementazione predefinita. Se guardate le fonti "Open JDK" vedrete le seguenti opzioni:

-XX: hashCode = n (da 0 a 5).

  • 0 - Park-Miller RNG (default)
  • 1 - Funzione di indirizzo e un po 'stato globale
  • 2 - const 1
  • 3 - contatore sequenatial
  • 4 - indirizzo un oggetto
  • 5 - xor-shift specifico per il filo

Qui è possibile trovare un implmenetation dettagliato: http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/tip/src/share/vm/runtime/synchronizer.cpp

Prendere in considerazione il codice sorgente ei commenti della funzione static inline intptr_t get_next_hash().

+0

bello sapere ... non sapevo se si potesse personalizzare anche questo. – ManojGumber

+0

Questa mi sembra la risposta vera !! – TechSpellBound

7

La parola chiave native indica che è stata implementata nel codice nativo (JVM).

+0

grazie, ma come e chi ottiene questo valore di hashcode e come viene restituito? Un piccolo spunto per favore !! –

+3

Ciò implicherebbe l'analisi del codice della JVM stessa e il modo in cui le implementazioni dei metodi JNI (Java Native Interface) sono associate alle loro definizioni Java. Credo che il valore reale non sia coerente tra le implementazioni della JVM. Se è necessario fare affidamento sul valore effettivo, eseguire l'override del metodo per conformarsi alle proprie esigenze. – akaIDIOT

+0

+1. e non penso che ci sia una specifica riguardante il valore reale dell'hashcode e la maniera del suo calcolo. (Ma ovviamente, deve essere internamente coerente allo stesso modo di qualsiasi altro hashCode). – Thilo

5

Se si vede la declaration di hashcode

public native int hashCode(); 

native nella dichiarazione indica che è implementato nativamente nel codice JVM.

0

Dov'è la parte di implementazione?

È già implementato dal framework. Please see the documentation.

Se non esiste un'implementazione, in che modo il metodo hashCode() restituisce un risultato?

Tuttavia, se si crea un tipo personalizzato, si è responsabili della generazione di un valore int che rappresenta una buona rappresentazione dello stato corrente degli oggetti. Here is a good example of that.

Problemi correlati