为什么Double.parseDouble(null)和Integer.parseInt(null)抛出不同的异常?

Ayy*_*lvi 2 java exception nullpointerexception

文档说有两种类型的例外Double.parseDouble(),一种用于Integer.parseInt(),但似乎不一致:

Integer.parseInt(null); // throws java.lang.NumberFormatException: null

Double.parseDouble(null); // throws java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 6

你是对的:这是不一致的.移动,没有什么可看的... ;-) JDK库非常大,随着时间的推移而增长,并且有各种不一致性.我不得不承认这一点让我感到惊讶,我觉得有必要仔细检查你的断言和实际行为(如果它与文档不同):http://ideone.com/18W8W8)但我们走了.

正如JB 指出的那样,对于不一致的根本原因的一个线索可能是Integer.parseInt从一开始就在JDK中,但是Double.parseDouble在1.2中添加了.因此,或许考虑更具体地解决这两个问题之间的问题.


因此,如果没有代码,我不会让我用上面的链接发布答案,所以:

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());
}
Run Code Online (Sandbox Code Playgroud)

输出:

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

  • 同意.作为指示,parseDouble()从1.2开始存在,而parseInt()从开始就存在.他们可能决定通过在1.1或1.2中抛出NullPointerException来一致地处理null,但是无法更改parseInt()以保持向后兼容性. (2认同)