java自动装箱与拆箱

时间:2023-02-17 13:52:43





一、java中八种基本数据类型对应的包装类型
        基本数据类型                            包装类型
        byte                                          java.lang.Byte
        short                                        java.lang.Short
        int                                            java.lang.Integer
        long                                         java.lang.Long
        float                                         java.lang.Float
        double                                     java.lang.Double
        boolean                                   java.lang.Boolean
        char                                        java.lang.Character
  

二.在java中,当基本类型与他们的父类类型运算的时候就会自动转换类型,叫做装箱与拆箱。

Integer a=10;
System.out.println(a+10);

上述代码会输出结果为:20.原因Integer为引用类型,是不能够进行加法运算的,当他与10相加时,会自动转换类型为int。这个过程我们叫做拆箱。
    上述代码第一句,我们知道Integer是一个引用类型,也就是一个类。当我们在实现一个类的时候,我们会用到这样的语法Class A = new Class()。这才是实现一个类的语法,那为什么Integer我们可以直接赋值呢,实质上当我们在运行Integer a=10这条语句时,系统自动为我们运行了Integer a = new Integer(10);这就是装箱。
    在自动装箱与拆箱中还有个小细节,看下列代码:
 Integer a= 10; 
Integer b= 10;
Integer c= 345;
Integer d= 345;
System.out.println(a==b);
System.out.println(c==d);

输出结果为true,false.原因在于在java的自动装箱与拆箱中使用了享元模式。当数值范围为一个字节时也就是-128~127时,系统会将我们创建的对象放在缓冲区,我们称之为整形池。当下次我们再次去创建的时候,系统直接将我们创建的当前引用引用到缓冲中已有的对象,而当数值超过这个范围时,系统就不在缓冲,则会新创建一个引用