2014-11-08 163 views

回答

6

你是對的:這是不一致的。移動,沒有什麼可以在這裏看到...... ;-) JDK庫非常大,隨着時間推移而增長,並且存在各種不一致。我不得不承認這一點令我感到吃驚,我覺得有必要仔細檢查你的斷言和實際行爲(以防與文檔有所不同):http://ideone.com/18W8W8)但我們走了。

由於JBpoints out,一個線索不一致的根本原因可能是Integer.parseInt是在JDK從一開始,但是Double.parseDouble在1.2加入。所以也許考慮在這兩個時間之間更具體地討論這個問題。


SO不會讓我張貼的答案用上面的鏈接沒有代碼,所以:

try { 
    Integer.parseInt(null); // throws java.lang.NumberFormatException: null 
} 
catch (Exception e) { 
    System.out.println("Integer: " + e.getClass().getName()); 
} 
try { 
    Double.parseDouble(null); // throws java.lang.NullPointerException 
} 
catch (Exception e) { 
    System.out.println("Double: " + e.getClass().getName()); 
} 

輸出:

 
Integer: java.lang.NumberFormatException 
Double: java.lang.NullPointerException 
+2

同意。作爲一個指示,parseDouble()自1.2開始存在,而parseInt()從開始就存在。他們可能決定應該通過在1.1或1.2中拋出NullPointerException來持續處理null,但不能改變parseInt()來保持向後兼容性。 – 2014-11-08 15:37:26

0

解析雙

public static double parseDouble(String s) throws NumberFormatException 
{ 
    return FloatingDecimal.readJavaFormatString(s).doubleValue(); 
} 

readJavaFormatString將返回null,這解釋了NullPointerException

parseInt函數

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

這是寫的那樣。不太一致,但在JDK中更糟糕。

相關問題