装箱拆箱系列:java中的Integer装箱实例

多数程序员或者在校学生,在平时开发中或者学习中,也就写个 int sum = 0;或者int i=0; i++;,没出什么bug,也不会关心这些多,这么细。

装箱这个词在《java开发实战经典》这本书229页,有专门的讲解,可以去看pdf哈。

面试造火箭,面试题中也会经常出。看看具体的面试题,运行下面的代码,看执行结果,引出疑问,最终了解Integer的装箱。

public class IntegerPackageTest {

    public static void main(String[] args) {

        Integer value1 = -128;  //自动装箱
        Integer value2 = -128;
        System.out.println(value1 == value2); //true
        System.out.println(value1.equals(value2));  //true
        System.out.println("-------------------");

        Integer value3 = -129;
        Integer value4 = -129;
        System.out.println(value3 == value4); //false
        System.out.println(value3.equals(value4)); //true
        System.out.println("-------------------");

        Integer value5 = 127;
        Integer value6 = 127;
        System.out.println(value5 == value6); //true
        System.out.println(value5.equals(value6));  //true
        System.out.println("-------------------");

        Integer value7 = 128;
        Integer value8 = 128;
        System.out.println(value7==value8);   //false
        System.out.println(value7.equals(value8));  //true
    }
}

什么是自动装箱? -128和-129输出结果为什么不一样?

JDK 1.5 (以后的版本)的新特性自动装箱和拆箱

  1. 装箱:把基本类型转换为包装类类型。例如:Integer是包装类,int是基本类型。

    int a =10;
    Integer i = new Integer(a);	
    
  2. 自动装箱是:Integer value = 10;
    这里提出疑问,为什么int就能直接转化为Integer ,Integer 类不应该是new出来一个对象吗?
    答案是这个过程会自动 new Integer(10) 对象。

  3. 自动装箱,范围在 -128 ~ 127 【256个数字 】的地址是一样的,-128 到 127 之间的有个自动装箱的缓存池。可以查看JDK源码Integer类中,有个私有static内部类如下:

      private static class IntegerCache {
       static final int low = -128;
       static final int high;
       static final Integer cache[];
    
       static {
         ...
       }
    
       private IntegerCache() {}
    }
    

    如果不在这个范围,就会使用new 新创建对象。所以用==判断,就会是false

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值