Java中的Integer.valueOf()

数值型数据的String和char比较

雷点1

刷leetcode时,比较String和char数值型数据时遇到的问题。

String [] s = new String[] {“1”,“2”, "3"};
char c = '3';
if(Integer.valueOf(s[2]) == Integer.valueOf(c)){
      return 2;
}
return 1;

结果返回1。
首先我们来巩固一下Integer.valueOf()的参数有哪些类型。

1.Integer.valueOf(String s)
2.Integer.valueOf(String s ,int radix)
3.Integer.valueOf(int i)

因为Integer.valueOf(char)这个方法本身不存在,Java会进行隐式类型转换(char类型比int型精度低),把char类型的数据当成int类型的数据来处理,所以’3’其实会被转化成它的ASCII码,因此就不相等了。

雷点2

这个雷点是我很久之前遇到过的,也是再回顾一下,场景是将char数组和String存储的int数值进行比较。如果这个数值是-128-127范围内的不会有什么问题,但是如果超过这个范围,会出现一个很有意思的情况。
假设我们最终都得到了一个Integer数据

Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1 == i2); // 结果是false
System.out.println(i1.equals(i2)); // 结果true

首先看i1 == i2,在Java中对于基本数据类型,比较的是它们的值,而非基本数据类型比较的是它们的地址。再结合Integer的创建过程,对于-128 - 127数值,Integer类会直接将它放到cache数组内,而大于这个值的则需要进行扩容,并开辟一个新的空间。因此,这两个对象的存储地址不同,对应的结果就为true。

i1.equals(i2)这是Object中的方法,默认是比较地址值,但在Integer、String等类中被重载申明了,Integer类中比较的是大小,所以结果为true。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值