Java 为什么Double.parseDouble(null)和Integer.parseInt(null)抛出不同的异常?
为什么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 注意:本文
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框来运行它。或者是一台古老的斯巴克机器。)