Integer缓存

Integer的缓存机制问题:
Integer是对小数据(-128127)是有缓存的,在jvm初始化的时候,数据-128127之间的数字便被缓存到了本地内存中,这样,如果初始化-128~127之间的数字,便会直接从内存中取出,而不需要再新建一个对象。

使用缓存时对象的初始化方式仅限于下面这两种:
Integer a=100;
Integer b=Integer.valueOf(100);
所以,100这个数字再-128~127之间,那么a和b实际上是引用的是一个内存地址,那么a==b自然就是true了。

Integer a1=128;
Integer b1=Integer.valueOf(128);
128不在-128~127之间了,所以会使用new新建个对象,那么a1和b1的内存地址就不一样了,a1==b1的结果就是false.

如果使用另一种初始化方式便不会使用缓存:
Integer c=new Integer(100);
使用new初始化对象会申请新的内存地址,所以a==c就是false。

如果是Integer对象之间比较,则比较的是两个对象的地址,如果是两个int比较则是比较基础数据类型的值,如果是Integer和int比较则Integer将会被自动拆箱,最终变为基本数据类型的比较。如:
int d=100;
则a == d;a == c;都为true;
int e=128;
则a1 == e;b1 == e;都为true;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值