概述
关于Integer中的缓冲区
在Java中预先创建了256个常用的整数包装类型的对象;话不多说,还得先看以下代码:
package com.iobox.dem01;
public class Test03 {
public static void main(String[] args) {
//面试题
//1.基本类型转成引用类型
Integer integer1=new Integer(100);
Integer integer2=new Integer(100);
System.out.println(integer1==integer2);//这里是false
//第二比较
Integer integer3=100;//自动装箱。
Integer integer4=100;
System.out.println(integer3==integer4);//这里是true
//第三个比较
Integer integer5=200;
Integer integer6=200;
System.out.println(integer5==integer6);//这里是false
}
}
在一种的结果为false;因为基本类型转成引用类型后,在栈中存放的是相关的地址,那比较的就是地址,整数类型成引用类型的两个Interger对象存放在队中,是两个不一样的地址,所以两者不相等,因此为false。
在第二个比较中,基本类型转成引用类型,采用了自动装箱的手段,调用的是Integer.Valueof()
方法。所以值相同。
但是在第三个变量中我们运行后发现,同样的自动装箱确实false;这是为啥嘞?
因为Java中一个Integer缓冲区,在Java中预先创建了256个常用的整数包装类型的对象,其中缓冲区中的范围是(-128,127)。
下面用图来解释为啥,第二种相等,但是第三种确实不等
在Java的存储机制种,当值小于127时,所有的地址都直接在Integer中找,找到以后,在放到栈里的引用变量中,这样的化那,这两个引用变量的地址就是一样的,所以像第二种比较就是为true;
但是,当所给的值不是在这个范围以内的时候,大于127时,就会在堆种新建一个引用类型;然后把地址给栈中的引用变量;像代码中的第三种比较,这就时创建了Integer5和Integer6 两个引用类型,他们的地址是不一样的。所以结果为false.
最后
以上就是怕孤单芒果为你收集整理的关于Integer中的缓冲区的全部内容,希望文章能够帮你解决关于Integer中的缓冲区所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复