为什么Double.parseDouble(null)和Integer.parseInt(null)会抛出不同的exception?
为什么Double.parseDouble(null)和Integer.parseInt(null)会抛出不同的exception?
这是一个历史性的事故还是故意的? 文档清楚地说明了Double.parseDouble(...)
和Integer.parseInt()
两种types的exception,但似乎并不一致:
Integer.parseInt(null); // throws java.lang.NumberFormatException: null
然而
Double.parseDouble(null); // throws java.lang.NullPointerException
期望为null抛出相同的exception是合理的; 然而,这些API是非常古老的,在这一点上可能无法改变。
和:
由于exception行为在JavaDoc中是长期存在的并且已经被指定,所以此时改变任一方法的行为是不切实际的。 闭幕,不会修复。
从: Bug报告:Integer.parseInt()和Double.parseDouble()抛出不同的空例外。
像其他人一样表示:这可能是由不同的作者。
注意:这篇文章中的所有内容都在Java7-b147的源代码中
Double.parseDouble()
进入Sun库(在sun.misc.FloatingDecimal
)发生的第一件重要事情是:
in = in.trim(); // don't fool around with white space. // throws NullPointerException if null
Integer.parseInt()
是在Integer
类中手动完成的。 发生的第一件重要事情是:
if (s == null) { throw new NumberFormatException("null"); }
我猜想有两个不同的作者。
- 抛出Exception的哪个部分是昂贵的?
- java.rmi.ServerException:在服务器线程中发生RemoteException(ClassNotFoundException)
- 在android上使用全局exception处理
- Java:作为控制stream的exception?
- 在ASP.NET Web Api中捕获所有未处理的exception
- ASP.NET Core Web APIexception处理
- 是否滥用IDisposable和“使用”作为获取exception安全的“范围行为”的手段?
- 是什么导致这个“Base-64字符数组长度无效”
- 为什么.NETexception不被try / catch块捕获?