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

导读:本篇文章讲解 Java中的装包(装箱)和拆包(装包),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

装箱和拆箱

在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。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89456.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!