整数缓存

废话就不多说,直接看代码


运行结果:


根据我们所学知识,==是对于对象内存地址的比较,二者必须相同才能返回true,否则返回false。那么上面的这段代码为何返回值都是true呢?

下面我们再来看看另外一段代码,稍后再做解释。


运行结果:


看完这段代码,我们发现,a和b的值只是增加了1,但是结果却发生了变化。a==b的结果是false,这是为什么呢?

在这里我们需要了解自动装箱,也就是java编译器把原始类型自动转换为封装类型。在上面的代码

Integer a=128;就相当于Integer a=Integer.valueOf(128);那么接下来,我们来看下这个方法


从这段代码中,可以看见,如果i的值在IntegerCache的最低位和最高位之间,那么就会返回IntegerCache中的cache数组中的值。接下来就是看这个low、high以及cache数组中的值。



从上面的代码中,我们可以看到,low的值是-128,high的值是127。cache数组里面存了-128至127之间的所有整数。所以在Integer a=127这个过程中,装箱操作知识从缓存中取了一个数出来,Integer b=127也是同样 的道理,取的都是缓存中的值,所以这是a==b返回值为true。一旦a和b的值在[-128,-127]这个区间外,就会有新的对象创建,这时,由于a和b内存地址不一样,所以返回值为false。至于a和c的比较,由于c是基本数据类型,在比较的时候只会比较值是否相等,所以返回值为true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值