整数缓存

来源:互联网 发布:q宠大乐斗刷战斗力软件 编辑:程序博客网 时间:2024/06/06 13:11

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


运行结果:


根据我们所学知识,==是对于对象内存地址的比较,二者必须相同才能返回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。

0 0
原创粉丝点击