为什么Float.parseFloat()会同时引发NumberFormatException和NullPointerException而Integer.parseInt()仅会引发NumberFormatException?

时间:2019-04-08 07:46:22

标签: java exception

在检查我的错误处理代码时偶然发现了这一点。当您调用Integer.parseInt(null)时,Java会引发NumberFormatException,而Float.parseFloat(null)会引发NullPointerException。另请参见FloatInteger

的文档

造成这种差异的原因是特定的技术还是设计原因,还是仅仅是历史性的怪癖?

1 个答案:

答案 0 :(得分:5)

这绝对是历史文物。

多年来,这种不一致和相关的文档问题已被作为Java Bug多次提出。例如:

最早,分配给该问题的Sun工程师写道:

  

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

     

将考虑使用Tiger。 [那是Java 5.0]

     

2002-12-03

然后一年后:

  

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

     

2003-10-21