关于Integer中的缓冲区

关于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时,就会在堆种新建一个引用类型;然后把地址给栈中的引用变量;像代码中的第三种比较,这就时创建了Integer5Integer6 两个引用类型,他们的地址是不一样的。所以结果为false.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值