今日浅浅一问:Integer中为什么a1=100,a2=100两值全等为true,a1=200,a2=200全等就为False

蹲厕所刷某音的时候看见一个视频,里面说的是他定义了一个Integer a1=100和一个Integer a2=100,让a1=a2输出为true,将数值设为200的时候竟然不相等了。又碰巧之前看见过这个问题,于是就来让自己复习一下。

上面的问题其实就是针对自动装箱和自动拆箱这方面问的,在Java5开始引入了自动装箱/拆箱机制,使得基本数据类型 int 和其对应的包装类 Integer 可以相互转换。

自动装箱指的是将基本类型(int-类似)自动转换成对应的包装类(Integer-类似),例如 Integer i = 100; 其实就是执行了 Integer i = Integer.valueOf(100); 会调用valueOf方法。

自动拆箱指的就是将包装类自动转换成对应的基本类型,例如 int t = i; 实际上执行了int t = i.intValue(); 会调用包装类对象的xxxValue方法(xxx表示对应的基本数据类型)。

OK重点!(敲黑板)!而对于自动装箱,Integer 类内部会对 -128 到 127 之间的整数进行缓存。当创建新的 Integer 对象时,如果值在这个范围内,并且这个范围已存在对象,那么返回这个对象(地址),不需要再创建新的对象(把旧的拿过来用)。不在范围内就去创建新的Integer对象。

需要注意,若是使用 == 比较两个Integer对象时,比较的是他们的引用(内存地址)。如果要比较两个值是否相等,应该使用的时 equals 方法。而比较基本数据类型的变量值是否相等时,可以使用 ==。此外,Integer 和 int 类型比较时,Integer 会自动拆箱为 int 类型,然后比较 int 的数值。欸额~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值