if (s == null) {
throw new NumberFormatException("null");
}
während Double bloss eine Funktion für Fliesskomazahlen aufruft.
(readJavaFormatString(String in) der Klasse FloatingDecimal)
Diese Funktion fängt das null nicht ab.
Wenn nun die Runetime auf ein Objekt zugreift (wie bei Double mit in.trim()) und das Objekt null ist, wirft sie von sich aus eine Nullpointer Exception.
hoffe das war verständlich
Der Autor war sich dessen bewusst, hat das auch im Komentar vermerkt. Wieso er das allerdings so handhaben wollte weiss ich nicht.
Fliesskomazahlern fangen wohl null nicht auf und geben daher eine Nullpointer Exception während bei Integer das null aufgefangen wird, aber eine Numberformat Exception geworfen wird....
@meez:
An Deiner Stelle würde ich mir darüber keine Gedanken machen. Die ganze Java API ist voll von so komischen Sachen. Ich finde es sehr interessant, dass sich Sun nicht an ihre eigenen Empfehlungen für Java Code halten.
Wenn nun die Runetime auf ein Objekt zugreift (wie bei Double mit in.trim()) und das Objekt null ist, wirft sie von sich aus eine Nullpointer Exception.
Vielen Dank für die Aufklärung...Endlich weiss ich wie eine NullPointerException zustande kommt...
Wobei du recht hast mit dem Kommentar...Es ist ihm tatseachlich bewusst...
FloatingDecimal.class
Code:
parseNumber:
try{
in = in.trim(); // don't fool around with white space.
// throws NullPointerException if null
Grizzly hat gesagt.:
An Deiner Stelle würde ich mir darüber keine Gedanken machen. Die ganze Java API ist voll von so komischen Sachen.
Yep...Aber genau um solche Sachen zu diskutieren ist dieses Forum ja gut... (Zudem hilfts vielleicht mal dem ein oder anderen, wenn er eine NPE hat)...
Also, ich finde das Verhalten auch ein wenig inkonsequent. Vor allem, wenn man die API liest, würde man nicht darauf kommen, dass sich das Verhalten unterscheidet:
API zu Integer hat gesagt.:
public static int parseInt(String s) throws NumberFormatException [...]
Throws: NumberFormatException - if the string does not contain a parsable integer.
public static double parseDouble(String s) throws NumberFormatException [...]
Throws: NumberFormatException - if the string does not contain a parsable double.