今天在代码中想要将一个 String
转为 Integer,
代码大概如下
public User getUserById(String userId) {
Integer userid = Integer.getInteger(userId);
//将userid传给一个dao层方法中查询User
}
结果发现, Integer.getInteger
得到的结果居然是null
原来 Integer.getInteger
并不是将字符串转换为整数值,它的底层其实是调用了 System.getProperty
,所以这个方法其实是获取系统的属性值。比如我们调用 Integer.getInteger("100")
,其实底层是调用 System.getProperty("100")
,但是因为系统中没有100这个属性,所以返回的就是null。
下面这是 getInteger
的JDK源码
getInteger这个名字真的很容易让人混淆。
如果想要将String转换成Integer,对应的方法其实是 valueOf(String)
,如果要转为int,对应的方法是 parseInt(String)
JDK中另一个容易让人产生歧义的例子是 Boolean.getBoolean
,它的底层也是调用了System.getProperty
从JDK的源代码中可以分析出来,假如我们调用 Boolean.getBoolean("true")
,因为系统中没有名称为true的属性,所以 System.getProperty("true")
的结果会是null,将null传给 parseBoolean
会抛出 NullPointException
,刚好被catch捕获到并且没有任何错误打印,最后结果返回false。