Dienstag, 7. Juni 2016

Java Fallen

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