Auch in Java gibt es ein paar Fallstricke, die man kennen muss, um nicht über sie zu stolpern.
Integer Caching
Eine relativ bekannte Sache betrifft das automatische Caching von Integer Werten. Hier werden per Default (JLS7 5.1.7) die Werte zwischen -128 und +127 gecached, so dass zum Beispiel ein Integer.valueOf(10)
immer das gleiche Objekt zurückliefert. Die führt dazu, dass folgendes gilt:
Integer.valueOf(10) == Integer.valueOf(10); // true
Integer.valueOf(1000) == Integer.valueOf(1000); // false
Weniger bekannt ist, dass nur der untere Wert fix ist. Der obere Wert lässt sich über die Property java.lang.Integer.IntegerCache.high
einstellen.
Double equals behavior
In der Dokumentation ist es zwar vermerkt, aber wer liest schon Dokumentation?
Für einige Grenzfälle verhält sich die equals Methode der Klasse Double anders, als der Vergleichsoperator == des double Typs.
So gilt für NaN (Not A Number) Werte:
Double.NaN == Double.NaN; // false
Double.NaN.equals(Double.NaN); // true
Weiterhin gilt für die vorzeichenbehaftete 0:
+0.0 == -0.0; // true
Double.valueOf(+0.0).equals(Double.valueOf(-0.0)); // false
Keine Kommentare:
Kommentar veröffentlichen