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

时间:2014-11-08 15:27:02

标签: java exception nullpointerexception

文档说明Double.parseDouble()有两种例外,Integer.parseInt()有一种例外,但似乎不一致:

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

Double.parseDouble(null); // throws java.lang.NullPointerException

2 个答案:

答案 0 :(得分:6)

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

作为JB points out,不一致的根本原因的一个线索可能是Integer.parseInt从一开始就在JDK中,但在1.2中添加了Double.parseDouble。因此,或许考虑在这两次之间更具体地解决这个问题。


所以我不会在没有代码的情况下通过上面的链接发布答案,所以:

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

答案 1 :(得分: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中的情况更糟。