文档说明Double.parseDouble()
有两种例外,Integer.parseInt()
有一种例外,但似乎不一致:
Integer.parseInt(null); // throws java.lang.NumberFormatException: null
Double.parseDouble(null); // throws java.lang.NullPointerException
答案 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中的情况更糟。