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

Zei*_*zei 9 java exception

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

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

Ste*_*n C 6

这绝对是历史文物。

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

在最早的这些中,被指派处理此问题的Sun工程师写道:

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

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

2002-12-03

然后一年后:

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

2003-10-21