2014-01-09 42 views
6

我正在使用下面的代碼。第一行是java.lang.NumberFormatException,第二行是java.lang.NullPointerException。我無法弄清楚爲什麼。爲什麼會出現不同的異常?

int intValue =Integer.parseInt(null); 
Double double1 = Double.parseDouble(null); 
+2

老實說,你能指望的行爲是?真? –

+0

閱讀Head First Java中有關異常的章節 - http://www.amazon.in/Head-First-Java-Kathy-Sierra/dp/8173666024?tag=googinhydr2765-21 ..他們很好地解釋了異常。 –

+11

停止downvoting,這個問題不值得這些許多downvotes。這是一個有效的疑問,一個解析器拋出一個異常,另一個則不同。一個有效的原因可能在那裏。 –

回答

11

因爲這就是它們是如何實現的,

int intValue =Integer.parseInt(null); 

如果我們看看parseInt函數的實現,它們都扔NumberFormatException如果輸入字符串是null

enter image description here

而且Double double1 = Double.parseDouble(null);

parseDouble(String s)方法還有另外一個方法調用即FloatingDecimal.readJavaFormatString(s).doubleValue();
readJavaFormatString(s)方法到底在哪NullPointerException拋出

enter image description here

FloatingDecimal.readJavaFormatString(s)方法

enter image description here

+2

它也被記錄爲:[parseDouble](http:///docs.oracle.com/javase/7/docs/api/java/lang/Double.html#parseDouble%28java.lang.String%29)和[parseInt](http://docs.oracle.com/javase/ 7 /文檔/ API /爪哇/郎/ Integer.html#parseInt函數%28java.lang.String%29)。 – jpmc26

+0

現在這是一個相當的答案:D – 2014-01-09 05:25:46

+0

@ jpmc26 +1比檢查實現簡單:) – gowtham

0

這兩個功能是如何實現的在各自的班級。

parseInt函數方法驗證參數:

if (s == null) { throw new NumberFormatException("null"); }

parseDecimal方法首先調用修剪輸入字符串參數:

in = in.trim(); // throws NullPointerException if null

相關問題