Integer类包含一些将String转换为Integer的方法:
Integer.parseInt(null);
参数:String返回:int,所以我期望当参数为null时抛出NPE
Integer.valueOf(null);
参数:String返回:整数,所以我预计当参数为null时,它应该返回null。但这个先决条件是错误的,我问为什么没有这样的方法可以处理这种情况呢?
答案 0 :(得分:11)
null
不是整数的有效表示。 Integer.parseInt()
要求解析的字符串是整数的vaild表示。
<强> Integer.parseInt() 强>
public static int parseInt(String s, int radix)
440 throws NumberFormatException
441 {
442 if (s == null) {
443 throw new NumberFormatException("null");
444 }
Integer.valueOf(str)] //调用Integer.parseInt(Str)来返回一个Integer实例。
public static Integer valueOf(String s) throws NumberFormatException
569 {
570 return new Integer(parseInt(s, 10));
571 }
答案 1 :(得分:8)
Sun的实施Integer(long
时间之前:))的人可能在编写该方法时没有想到数据库。除了在处理数据库数据时,或者在尝试使用null显式表示“unknown”的极少数情况下,null通常是出现严重错误的迹象。一般来说,一旦出现问题就提出异常是个好主意。 (a Fail fast设计)
如果您曾经花时间寻找C中的分段错误,这是由于字符串值超过您为其提供的内存(然后覆盖了一些程序代码或其他数据),您将非常了解当出现问题时,没有失败是多么糟糕。
从Java 1.0开始,与java中的数据库的交互变得非常普遍,所以你可能会建议应该有一个方法来处理这个问题。 Integer是一个最终的类,所以如果你构建自己的类Integer,你将失去自动装箱,所以这可能需要oracle改变语言。
基本上,你观察到的是现在的样子,而且有人必须付钱给你代码:)
答案 2 :(得分:2)
我可能错了,@ hudi,但这是你在找什么?
public Integer valueOf2( String inputString ) {
return (inputString == null) ? null : Integer.parseInt(inputString);
}
答案 3 :(得分:0)