美文网首页
Java自动装箱和拆箱

Java自动装箱和拆箱

作者: LaobingFung | 来源:发表于2019-02-21 12:36 被阅读0次

    Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做自动装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。自动装箱和拆箱使Java在复制和方法调用时更加方便。

    什么是自动装箱和拆箱?

    自动装箱和拆箱是指装箱和拆箱过程是非人为的。基本类型byte,short,char,int,long,float,double和boolean可以自动转换为包装类Byte,Short,Character,Integer,Long,Float,Double,Boolean。

    
    public class Main {
        public static void main(String[] args) {
        Integer int1= 1;//自动装箱
        int int2= int1;//自定拆箱
        }
    }
    

    自动装箱拆箱要点

    自动装箱时编译器调用valueOf将原始类型值转换成对象,同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类型值。
    自动装箱是将boolean值转换成Boolean对象,byte值转换成Byte对象,char转换成Character对象,float值转换成Float对象,int转换成Integer,long转换成Long,short转换成Short,自动拆箱则是相反的操作。

    使用==判断基本类型及其包装类指是否相等

    这是一种不常见的情况

    Integer int1 = 1;
    int int2 = 1;
    System.out.println(int1 == int2);//true
    

    用==判断int1和int2值是否相等时,出于两个考虑:

    1. 首先将int2自动装箱,由于是Integer自动装箱-128到127之间的值都使用系统缓存的值,这种情况会导致int1和int2实际上是两个一样的Integer对象,使用==判断地址是否相同,返回true;
    2. 首先将int1拆箱,==实际上判断两个基本类型是否相等,返回true。

    经过在java.lang.Integer源码的装箱和拆箱代码打断点测试,这一过程实际上用了自动拆箱的方法。

    相关文章

      网友评论

          本文标题:Java自动装箱和拆箱

          本文链接:https://www.haomeiwen.com/subject/kirryqtx.html