Ich weiß, wenn wir Objekte übergeben, übergeben wir seine Referenz als Wert. Aber dieser Wert, den Sie erhalten, verwendet die Methode hashcode()
(nach meinen Tests ist es das gleiche)? Da hashcode()
ist nicht die Speicheradresse und nicht garantiert, um einzigartige Werte die ganze Zeit zu erhalten, kann es seltsame Dinge passieren wie Kollisionen beim Übergeben von Objekten?Was passiert wirklich, wenn Objekte in Java übergeben werden?
(Unter der Annahme, hashcode()
nicht außer Kraft gesetzt werden, das heißt, es gibt den gleichen Wert wie System.identityHashCode()
)
Drei ähnliche Fragen sind viele, aber ich kann nicht eine relevante Ressource finden, die Diskusse, was dieser Wert Wesen übergeben und wie bekommen Sie es?
EDIT: Hier ist mein Test. Der Standardwert toSting()
verwendet das hashCode()
im Inneren und konvertiert es in einen Hexadezimalwert. Wenn wir also Objekte weitergeben, wird dieser Wert weitergegeben? Oder was macht Java, um alle Objekte im Auge zu behalten (wird übergeben), so wird es keine Referenzkollisionen geben?
Object o = new Object();
System.out.println(o);
System.out.println(o.toString()); //both prints same thing - [email protected]
Wie Sie sagen, wenn die Standardimplementierung die Speicheradresse zurückgibt, ist es kein Problem. Aber was ich gesehen habe ist, dass es (Standardfunktion) nicht garantiert ist, die Speicheradresse zurückzugeben. Aber wieder was dann passiert, wenn es mehr Objekte als 2^32 gibt und hashcode() gibt eine ganze Zahl zurück, die 32 Bits ist ?? – KillBill
@ user601L 'hashcode()' ist keineswegs eine narrensichere Methode. Es gibt gelegentlich Kollisionen. Aber es wird immer einen Wert finden, der zu Ihnen zurückkehrt, egal ob es seine Speicheradresse verwendet oder nicht. Sie sollten sich wirklich nicht viel Sorgen machen, nur wissen, dass Kollisionen in den Kantenfällen möglich sind. –
@bohemian Danke für die Korrektur meiner Grammatik. Ich bin ein Idiot. –