Die Anweisungsfolge Zeile 36 bis 43 unterscheidet sich von der Anweisungsfolge
Zeile 25 bis 32 nur durch die Verwendung des Variablentyps
Integer
statt
int. In den Kommentaren sehen Sie, wie der Compiler hier Autoboxing
und Autounboxing einsetzt.
Gefährlich wird es in Zeile 39, weil dort mit
==
auf Objektidentität gestestet wird und nicht auf Gleichheit der Werte in den Objekten.
Je nach Wert wird der
if- oder
else-Zweig ausgeführt.
Grund ist, dass die Fabrikmethode
Integer.valueOf(int) anders als
Boolean.valueOf(boolean) für gleiche Werte nicht immer dasselbe (identische)
Objekt liefert. Denn dafür müsste die Klasse für alle 4.294.967.295
int-Werte ein Objekt im Vorrat halten.
Dieser Vorrat würde über 16 Gigabyte Hauptspeicher belegen.
Immerhin gibt es einen Vorrat von 255 Objekten für die Werte -128 bis +127.
In diesem Zahlenbereich erzeugt die Fabrikmethode nicht jedes Mal ein neues Objekt.
Der Vorrat (Cache) wird übrigens in der OpenJDK-Implementierung mit einem
statischen Initialisierungsblock
erzeugt.