Java中的装包(装箱)和拆包(装包)

装箱和拆箱

在Java的学习中,我们有的时候会设计装箱和拆箱的概念(也就是常说的装包和拆包),这篇博客将详细讲解一下装箱和拆箱的概念及其用途。
装箱(装包):将基本数据类型转换成包装类类型
拆箱(拆包):将包装类类型转换成基本数据类型

装箱

在这里插入图片描述
注意:这里的三行代码的作用都是定义一个变量10,其中第一个省略了new Integer这个对象(类似于数组定义时直接写数组的内容一样),这是一个自动装箱,二三两行都是手动装箱;其中通过编译后的字节码文件可以看出,一三两个代码编译的时候都会调用valueOf方法

总结:为什么要把基本类型转换成包装类类型?
1.在泛型中传入的参数只能是类类型,不能使用基本数据类型;
2.包装类中有的方法是静态方法,不能通过对象去调用,需要通过类来访问

拆箱

在这里插入图片描述
注意:上述二三两行代码就是把包装类类型的变量a转换成基本数据类型的变量b和c,其中第二行是自动拆箱,第三行是手动拆箱

总结:
手动拆箱时需要通过对象来调用Integer包装类中的一些方法

包装类易混淆例题

代码如下:

public class Test1 {
    public static void main(String[] args) {
        Integer a = 127;
        Integer b = 127;
        Integer c = 128;
        Integer d = 128;
        System.out.println(a == b);
        System.out.println(c == d);
    }
}

请思考一下该代码所执行后的结果?
在这里插入图片描述
为什么答案是true和false呢?

原因:a b c d四个变量的定义都是自动装箱,前面说了自动装箱在编译的时候会调用valueOf方法,查看valueOf方法的源码可以知道(自行查看),内部将-128–127之间的数据依次存放在一个下标为0,容量为258的数组当中,当输入的数据在-128–127之间则会返回其对应数组的下标,当输入的数据不在这个范围底层会new一个新的对象,此时就算c d输入的数据都为300,但是他们是两个不同的对象,所存储的对象的地址不相同,故为false。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值