So che quando stiamo passando oggetti stiamo passando il suo riferimento come valore. Ma questo valore si ottiene sta usando il metodo hashcode()
giusto (secondo i miei test è lo stesso)? Poiché hashcode()
non è l'indirizzo di memoria e non è garantito il recupero di valori univoci per tutto il tempo, possono esserci strane cose come collisioni quando si passano oggetti?cosa succede veramente quando si passano oggetti in java?
(Supponendo hashcode()
non è trovare un limite, vale a dire, restituisce lo stesso valore di System.identityHashCode()
)
Tre sono molti come questo domande, ma non riesco a trovare una risorsa rilevante che discuses ciò è che essere il valore passato e come lo hai preso?
MODIFICA: Ecco il mio test. Il valore predefinito toSting()
utilizza lo hashCode()
all'interno e lo converte in un valore esadecimale. Quindi, quando stiamo passando oggetti, è questo il valore che viene passato? O cosa fa java per tenere traccia di tutti gli oggetti (passati), quindi non ci saranno più riferimenti di collisione?
Object o = new Object();
System.out.println(o);
System.out.println(o.toString()); //both prints same thing - [email protected]
Come dici tu se l'implementazione predefinita restituisce l'indirizzo di memoria, quindi non è un problema. Ma quello che ho visto è che è (funzione predefinita) non è garantito per restituire l'indirizzo di memoria. Ma di nuovo cosa succede quando ci sono più oggetti di 2^32 e hashcode() restituisce un intero che è 32 bit ?? – KillBill
@ user601L 'hashcode()' non è assolutamente un metodo infallibile. Occasionalmente ci sono scontri. Ma troverà sempre qualche valore da restituire, indipendentemente dal fatto che usi o meno l'indirizzo di memoria per ottenerlo. Non dovresti davvero preoccupartene molto, solo sapere che le collisioni sono possibili nei casi limite. –
@bohemian Grazie per aver corretto il mio grammer. Imaidiot. –