Integer Caching

Schau Dir mal diesen Code an. Was erwartest Du bei dem 3. Vergleich?


public class Test {

public static void main(String[] args) {

Integer wertGleich = 100;
Integer wertAuchGleich = 100;

// Referenzvergleich: Test 1
System.out.println(wertGleich == wertAuchGleich); // ergibt true

// gleicher Test nur mit anderen Wert
Integer wertGleichZwei = 122;
Integer wertAuchGleichZwei = 122;

// Referenzvergleich: Test 2 auch
System.out.println(wertGleichZwei == wertAuchGleichZwei); // ergibt true

// Dreimal ist Bremer Recht: Test 3: Gleicher Test nur mit anderen Wert
Integer wertUngleich = 150;
Integer wertAuchUngleich = 150;

// Was erwartest Du?

// Referenzvergleich test 3
System.out.println(wertUngleich == wertAuchUngleich); // ergibt false !!!
}

}

Warum ist das so?

In der Annahme, dass sich die Verwendung von Integer Objekten im Bereich von -127 bis +128 häuft, cacht Java diese Objekt indem es diese Objekte bereits zum Ladezeitpunkt instanziiert und für den weiteren Gebrauch vorhält. Wird ein Boxing für einen int in dem genannten Wertebereich wie oben angeführt durchgeführt, erhält man immer die gleiche Referenz auf ein Integer-Objekt.

Gleiche Werte im Bereich von -127 bis +128 liefern also auch die gleiche Referenz und somit wird auch die Wertgleichheit mit == bei den obigen beiden Testfällen ermittelt.

Der 3. Testfall liegt ausserhalb des Integer-Caching-Bereiches und liefert deshalb false.