装箱与拆箱

1、装箱与拆箱是什么

装箱是将值类型换成引用类型的过程,
拆箱是将引用类型转换成值类型的过程
装箱:用于在垃圾回收堆中存储值类型,装箱是值类型到Object类型或到此类型所实现的任何接口类型的隐式转换。
拆箱,从object类型到值类型或者从接口类型到实现该接口的值类型的显式转换。

2、定义

Integer i = new Integer(1);
从JDK1.5开始就提供了自动装箱的功能,要生成一个数值为1的Integer对象,只需:
Integer i = 1;(这个过程中会自动根据数值创建对应的 Integer对象,这就是装箱。)
举例:
Integer i = 1; //装箱(定义的时候自动进行装箱)
int j = i; //拆箱(进行赋值或者逻辑运算时会自动进行拆箱)(将引用类型Integer的i转换成值类型int的i,然后进行赋值或者四则运算)

3、作用是什么?为什么要进行拆箱和装箱?

4、如何进行装箱和拆箱?

如下通过反编译: int装箱的时候自动调用Integer的valueOf(int)方法;Integer拆箱的时候自动调用Integer的intValue方法

       Integer i1 = new Integer(12);
        Integer i2 = new Integer(12);
        System.out.println(i1 == i2);
// false   new过了,在堆里新建了个地址快
        Integer i3 = 126;
        Integer i4 = 126;
        int i5 = 126;
        System.out.println(i3 == i4);
        System.out.println(i3 == i5);
//true 都没有超标用的是缓存数据   
//true 自动拆箱比较内容
        Integer i6 = 128;
        Integer i7 = 128;
        int i8 = 128;
        System.out.println(i6 == i7);
        System.out.println(i6 == i8);
//false 超标 new过了
//自动拆箱,比较数值

分情况来比较

  1. 都定义為Integer的比較

    new :一旦new,就是开辟一块新内存,结果肯定是false

    不new :

    看范围:

    Integer做了缓存,-128至127.当你取值在这个范围的时候,会采用缓存的对像

    所以会相等,当不在这个范围,内部创建新的对象, 此时不相等

    Integer和int的比较:
    实际比较的是数值,Integer会做拆箱的动作,来跟基本数据类型做比较,此时跟是否,在缓存范围内或是否new都没有关系
    源码分析:
    当我们写Integer i=126.实际上做了自动装箱,Integer i=Integer.valueOf(126);分析这段源码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值