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

Java 为什么Double.parseDouble(null)和Integer.parseInt(null)抛出不同的异常?,java,exception,nullpointerexception,numberformatexception,Java,Exception,Nullpointerexception,Numberformatexception,为什么Double.parseDouble(null)和Integer.parseInt(null)抛出不同的异常 这是历史性的意外还是故意的?文件明确规定了两种例外情况,一种例外情况,但似乎不一致: Integer.parseInt(null); // throws java.lang.NumberFormatException: null 然而 Double.parseDouble(null); // throws java.lang.NullPointerException 注意:本文

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

这是历史性的意外还是故意的?文件明确规定了两种例外情况,一种例外情况,但似乎不一致:

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

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

注意:本文中的所有内容都在Java7-b147的源代码中

Double.parseDouble()
进入Sun库(中),发生的第一件重要事情是:

in = in.trim(); // don't fool around with white space.
                // throws NullPointerException if null
if (s == null) {
    throw new NumberFormatException("null");
}
Integer.parseInt()
在类中手动完成。发生的第一件重要事情是:

in = in.trim(); // don't fool around with white space.
                // throws NullPointerException if null
if (s == null) {
    throw new NumberFormatException("null");
}
我猜有两个不同的作者

有理由期望为null抛出相同的异常;但是,这些api非常旧,此时可能无法更改

以及:

由于异常行为是长期存在的,并且是在JavaDoc中指定的,因此此时更改任一方法的行为都是不切实际的。关闭as将无法修复

摘自:


正如其他人所说:它可能是由不同的作者制作的。

@Aquillo:double原语检查了各自方法的源代码,这似乎只是不一致
parseDouble
不执行空检查,在遇到NPE时只抛出NPE,但在
parseInt
中,然后检查输入字符串的
null
。我看不出有什么好的理由说明它们的行为应该不同。我已经检查过它们是否抛出sameNumberFormatException。相关且有趣的错误报告:似乎在Java 6中,来自Double/Float类的解析方法抛出了NPE。有趣的是,评论说这个功能在当时“非常旧”,这是15年前的事了,这种不一致很可能起源于Java1.0。不幸的是,很难核实这一点。我不认为Java1.0可以下载,您需要一个Windows95/NT框来运行它。或者是一台古老的斯巴克机器。)