Ich habe gerade Java Reflection API untersucht und bin auf folgendes Code-Snippet gestoßen
%Vor%Ausgabe:
%Vor%Ich habe die Dokumentation der set-Methode gelesen, die besagt, dass sie den Wert des Feldes für das gegebene Objekt festlegt. Aber ich bin nicht in der Lage, die Ausgabe des Codes zu verstehen, weil es in allen Fällen 42 drucken sollte.
Kann jemand bitte Einblick geben, was im Code passiert?
ruft println(int)
nicht println(Object)
auf. Das Boxen passiert nie. Das macht es schneller und hat auch vor 1.5 funktioniert.
In den anderen Fällen boxt man durch Integer.valueOf(int)
. Diese Methode ist so definiert, dass immer die gleichen Integer
-Objekte für Werte zwischen -128 und einschließlich 127 zurückgegeben werden (möglicherweise dasselbe Verhalten für andere Werte). Also, wo 42 in Ihrem Programm eingerahmt ist, erhalten Sie das gleiche Objekt, und wenn Sie den Wert von value
in diesem Objekt setzen, ändert es sich, egal welche Referenz gelesen wird.
Wenn Sie das Boxing explizit in den Code einfügen würden, würde es so aussehen:
%Vor% Wie wir wissen, liefert Integer.valueOf(
genau das gleiche Objekt für 42, der Code ist effektiv:
Tags und Links java reflection