Java 基础类型的包装类 Integer

纸上得来终觉浅,绝知此事要躬行。

上代码

		
        Integer i = new Integer(0);
        Integer j = new Integer(0);

        //false
        // 分析 :new操作 都是在内存分配空间,创建对象,
		//所以引用不同(地址不同),== 操作符就是直接比较变量存在的值
		// 值有真正的值也有地址,但是都是二进制数字,所以看成数字的比较
        boolean res = i == j;

        Integer i1 = 0;
        Integer j1 = 0;

        //true  为什么相等?
        res = i1 == j1;

为什么下面的相等的了咧, 代码做了什么?调试就知道了

Integer i1 = 0;

赋值运算是,先右到左,所以右边的 0 操作了什么(有点懵),用IDEA在赋值语句打断点,debug模式启动,点击 调试界面的【Force step into】(红色的下一步,不是蓝色的)按钮,程序进入Integer 类的 public static Integer valueOf(int i) 方法,继续调试,基本就知道是怎么回事了;

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

方法中的 IntegerCache 是Integer的内部类,是个缓存类,缓存了-128 到 127 的数对应的Intebger实例,所以上面i1 和j1 都是用这个方法初始化的,0介于 [-128,127]之间,所以缓存的同一个实例,即存储的引用地址是一个数字,所以i1==j1为true;

可以去看看IntegerCache具体代码

为什么是[-128,127],这个就有趣了,可以看 IntegerCache 初始化cache代码,可以读[java.lang.Integer.IntegerCache.high]配置属性,和一个小算法;

Long类也有,可以都去看看,Long是固定缓存[-128,127]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的包装数据类型是用来将基本数据类型转换为对象的类型包装类有两种子类型:对象型包装类和数值型包装类。对象型包装类包括Character和Boolean,而数值型包装类包括Byte、Short、Integer、Long、Float和Double。\[2\] 在Java中,基本数据类型包装类之间可以通过装箱和拆箱操作进行转换。装箱操作是将基本数据类型转换为包装类,可以使用包装类的构造方法来接收基本数据类型的变量。而拆箱操作是从包装类中取出被包装的数据,可以使用从Number类继承而来的xxxValue方法来完成。\[3\] 例如,可以使用Integer类的构造方法将int类型的数据装箱为Integer对象,然后使用intValue方法将Integer对象拆箱为int类型的数据。下面是一个示例代码: ```java Integer obj = new Integer(10); int num = obj.intValue(); System.out.println(num); ``` 这段代码将整数10装箱为Integer对象,然后将Integer对象拆箱为int类型的数据,并输出结果为10。\[3\] #### 引用[.reference_title] - *1* [Java包装类](https://blog.csdn.net/weixin_46140377/article/details/123404981)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [JAVA基础编程——基本数据类型包装类](https://blog.csdn.net/SAKURASANN/article/details/124647622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值