Java中Integer.getInteger并不是将字符串转为数字

本文揭示了Java中Integer.getInteger()方法的常见误解,该方法实际上用于获取系统属性而非转换字符串为整数。正确的转换方法是使用Integer.valueOf()或Integer.parseInt()。同时,Boolean.getBoolean()也有类似问题,可能导致意外的false返回值。理解这些方法的底层原理对于避免编程陷阱至关重要。
摘要由CSDN通过智能技术生成

今天在代码中想要将一个 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。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值