自动装拆箱

自动装拆箱

​ 基本数据类型自动装换为对应的封装类就是自动装箱,封装类自动转换为对应的基本数据类型就是自动拆箱。

自动装拆箱不需要用new关键字来创建对象,也无需调用intValue()方法,基本数据类型直接转换为引用类型,引用类型直接转换为基本数据类型。

package com.sw.t2;

public class Test1 {
    public static void main(String[] args) {
/*        int i = 100;//定义一个整型变量i=100
        Integer i1 = new Integer(i);//用Integer的构造方法创建对象把int型的数据转换成它的封装类
        
        int i2 = i1.intValue();//使用intValue()方法把封装类型的i1转换成基本数据类型i2;*/
        //如果是自动装拆箱的话就可以直接
        Integer i1 = 100;
        int i2 = i1;
        //这一过程中实现了自动装拆箱,
    }
}

​ 在上面的自动转拆箱过程中,Integer i1 = 100就相当于是new Integer(100),int i2 = i1就相当于是int i2 = i1.intValue()

package com.sw.t2;

public class Test1 {
    public static void main(String[] args) {
        Integer i1 = 100;
        Integer i2 = 100;

        Integer i3 = 200;
        Integer i4  = 200;
        System.out.println(i1 == i2);//输出true
        System.out.println(i3 == i4);//输出false
        //出现这种情况是为什么呢?
        //根据源码可以知道在Integer中有个内部类它初始化了一个Integer数组范围是-128到127;
        //所有当Integer的值在这个范围里面的时候是直接用的这个数组里面的值,
        //如果都是100的话就是同一个对象;
        //但是当这个值不在这个范围的时候就会调用Integer()构造方法,new了两次对象,
        //所以是两个不同的对象,比较的结果也就成了false
    }
}

package com.sw.t2;

public class Test1 {
    public static void main(String[] args) {
        Double i1 = 100.0;
        Double i2 = 100.0;

        Double i3 = 200.0;
        Double i4  = 200.0;
        System.out.println(i1 == i2);//输出false
        System.out.println(i3 == i4);//输出false
        //这个Double类型运行出来的结果,两个都是false
        //在源码中查看可以知道Double类型的它是直接就new了一个对象,并没有像
        //Integer类型的一样有个数组。
    }
}

​ Short、Byte、Character、Long都和Integer一样会根据数据的大小返回对象,如果在初始化的数组里就返回一个相同的对象,要是不在的话就返回两个不同的对象。

​ Double和Float类型的则是每一次都会返回不同的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值