Java的包装类,以及自动装箱和自动拆箱的操作.

本文深入探讨Java中装箱和拆箱的概念,解释基本数据类型与包装类之间的转换过程,包括自动装箱和手动装箱,以及自动拆箱和手动拆箱的实现方式。通过代码示例展示Integer、Double等包装类的使用,并讨论包装类对象的比较方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装箱:就是将基本的数据类型转换为对象的过程。拆箱就是将对象转换为基本的数据类型的过程,还是来看看代码吧。截图如下.

/**
 * @author hackbase   来看看Java的自动拆箱和自动装箱的操作.
 */
public class Packing {
    public static void main(String[] args) {
        /**
         * 今天我们来说说java里面的拆箱和装箱的操作.l
         * 拆箱和装箱是基本数据类型和包装类的转换.
         * 那么为何要将基本数据类型装箱了我们自导java是一门面向
         * 对象的语言,那么基本数据类型不具备面向对象的特点
         * 用在实际的开发里面是非常的不方便的,所以要将基本的数据类型
         * 封装成为包装类。将基本数据类型转换为对象的过程称之为装箱的操作
         * 反过来将包装的对象转换为基本的数据类型类型的过程称之为拆箱,.
         * 那么Java里面白装类有哪些了。
         * 来看看包装类。  Itegern堆基本的整形的数据的包装的一个类.
         *
         *             Double----->double浮点数
         *             Float------->float
         *             Integer------>int
         *             Boolean----->boolean
         *             Byte---------->byte
         *             String---------->string
         *             等等来看看下面的代码吧
         */
        System.out.println("--------Integer-------");
        //输出Inter包装类的最大数值.
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Integer.TYPE);
        System.out.println(Integer.max(12, 34));
        //从输出的结果97可以看到该方法是输出该字符的 Anscii编码。也就是
        //数值和字符是没有却别的,只是表现形式不一样而已.
        System.out.println(Integer.valueOf('a'));


        //常见包装类的对象
        Integer a = new Integer(12);
        Integer b = new Integer(12);
        System.out.println(a.equals(b));
        //equals方法是object对象的方法,所以看到a和b现在已经是一个对象了。
        System.out.println(a.getClass());

        System.out.println(a.compareTo(b));

        //获取包装类的int数值.
        System.out.println(b.intValue());

        System.out.println(b.doubleValue());


        System.out.println("-------Double-------->");

        System.out.println(Double.MAX_VALUE);
        System.out.println(Double.MIN_VALUE);
        System.out.println(Double.MIN_NORMAL);

        System.out.println(Double.SIZE);
        System.out.println(Double.TYPE);

        //其他包装类型的就在这里不多说了。和上面的基本是差不多的,现在我们来看看
        //自动拆箱:就是将包装类的对象自动转换为基本的数据类型
        //自动装箱就是将基本的数据类型转换为包装类的对象的过程。在Java里面装箱和拆箱
        //的操作如下代码;


        System.out.println("--------StringTest------");
        //手动装箱
        String test3 = new String("123");
        System.out.println(test3.hashCode());
        //手动拆箱是通过调用方法来实现的。
        String test4 = test3.valueOf(test3);
        System.out.println(test4);
        //在来看看下面的代码
        System.out.println("--------test7------>>>>");
        Integer datatest = new Integer(1000);
        //输出的结果可以看到就是i一个对象了。这个就是手动装箱的操作.
        System.out.println(datatest.getClass());
        //手动拆箱的操作.Integer包装类的手动拆箱和手动装箱的操作.
        int rq = datatest.intValue();


        System.out.println("------自动装箱和拆箱的操作------->>>");
        Integer i = 100;
        //自动装箱

        //自动拆箱的操作.
        int temp = i;

        /**上面的代码,是如何事项自动拆箱和自动装箱的擦做了,这背后JVM就会帮助我么完成自动拆箱和自动装箱的
         * 操作.简单的来说装箱就是将基本的数据类型转换为包装器类型拆箱 就是将包装的数据雷响 转换为基本的数据类型
         * 来看看Javad的包装类型.
         *
         * int----->Integer
         * boolean---->Boolean
         * byte------->Byte
         * short------>Short
         * long-------Long
         * float----->Float
         * double------Double
         * char-------->Chattaer
         *
         */


        /**
         * 下面我们来看看装箱和拆箱是如何实现的。在java虚拟机里面.
         * 从反编译得到的字节码内容可以看出,在装箱的时候自动调用的是Integer的valueOf(int)方法。
         * 而在拆箱的时候自动调用的是Integer的intValue方法。
         *
         * 其他的也类似,比如Double、Character,不相信的朋友可以自己手动尝试一下。
         *
         * 因此可以用一句话总结装箱和拆箱的实现过程:
         *
         * 装箱过程是通过调用包装器的valueOf方法实现的,
         * 而拆箱过程是通过调用包装器的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。
         *
         */


         /**
         *
         * 面试中的 相关问题.来看看下面的代码.
         */

        System.out.println("-----Demo----->>>");

        Integer t1 = 100;
        Integer t2 = 100;

        Integer t3 = 20000000;
        Integer t4 = 20000000;

        System.out.println(t1.equals(t2));
        System.out.println(t3.equals(t4));

        //从结果可以看出的就是t1和t2指向的都是同一个对象.同理t3和t4也是一样的。都指向的是同
        //一个对象,但是要注意的是假如,这个数值超出基本类型的取值范围的话,比如后面的代码
        //在某些编译器上面是报错的。但是后续Java的版本是一样的,两个输出的 结果都为真.在来看看
        //equals比较的话,两个都为真,都是指向内存中的 同一个对象.但是包装类型不能使用等号来进行比较
        //如果可以的话,后面一个结果输出的结果为假。因为数据超出基本数据的范围。在源码就直到,输出结果为假。
        //下面的代码

        System.out.println("------Double Test---->>>");
        Double   r1=100.0;
        Double    r2=100.0;
        Double i3 = 200.0;
        Double i4 = 200.0;
        System.out.println(r1.equals(r2));
        System.out.println(i3.equals(i4));


        /**
         * 他们虽然都是指向的通同一个引用。因此他们的equals方法的 返回值都是i一样的。结果都为true
         * 在idea编辑器里面,不能使用等号来比较。
         */


    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值