我是靠谱客的博主 怕孤单芒果,最近开发中收集的这篇文章主要介绍关于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.

最后

以上就是怕孤单芒果为你收集整理的关于Integer中的缓冲区的全部内容,希望文章能够帮你解决关于Integer中的缓冲区所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部