美文网首页
自动装箱拆箱

自动装箱拆箱

作者: 金馆长说 | 来源:发表于2018-08-15 18:27 被阅读13次

    技术小黑屋的文章

    什么是自动装箱拆箱?
    这个概念是在java 1.5版本的时候引入的概念,只要解决的是1.5之前版本的原始类型和包装类型不能自动进行转换,这就导致了很多不必要的转型操作,装箱为的就是解决这个重复的转型操作,可以说是解放了程序员的双手。

    比如把int 转换成 Integer这个叫做装箱,把Integer转换成int 这个叫拆箱,之前这种操作都需要手动进行。现在我们只要直接使用就行了,不需要关心转型的操作。其他原始类型byte,short,char,int,long,float,double和boolean对应的封装类为Byte,Short,Character,Integer,Long,Float,Double,Boolean。

    如何转型

    • 自动装箱编译器会在编译时调用valueOf()把原始类型进行转换,8原始类型的包装类都有一个valueOf()的方法,用与装箱操作。
    • 自动拆箱编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类型值。

    装箱

     public static Integer valueOf(int i) {
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);
        }
    

    拆箱

    /**
         * Returns the value of this {@code Integer} as an
         * {@code int}.
         */
        public int intValue() {
            return value;
        }
    

    什么时候发生装箱拆箱
    这种情况在编写代码的时候很常见,比如定义了一个int类型的值,但是它接收的是一个Integer类型的值。这个时候就发生一个装箱的操作,这是编译器自动完成的。相反Integer赋值一个int类的值,这就发生了拆箱操作。

    1.5版本之前操作装箱操作需要调用方法进行转型。

    Integer iObject = Integer.valueOf(3);
    Int iPrimitive = iObject.intValue()
    

    1.5版本之后直接编译器就给转换了

    Integer iObject = Integer.valueOf(3);
    Int iPrimitive = iObject.intValue()
    

    自动装箱主要发生在两种情况,一种是赋值时,另一种是在方法调用的时候

    赋值

     Integer age = 2;
     int maxAge = 20;
    
    

    调用

    public static Integer show(Integer iParam){
       System.out.println("autoboxing example - method invocation i: " + iParam);
       return iParam;
    }
    
    //autoboxing and unboxing in method invocation
    show(3); //autoboxing
    int result = show(3); //unboxing because return type of method is Integer
    

    使用中注意问题

    重复的对象创建

    这里的循环就会创建5000个Interge对象,非常的损害系统的性能,因为sun+=i,i是一个原始类型在在做完原算操作后,就又赋值给了它的包装类型了,这个时候就相当与 Integer sum = new Integer(result),所以做运算的时候要注意这种类型转换的问题避免不必要的开销。

    Integer sum = 0;
     for(int i=1000; i<5000; i++){
       sum+=i;
    }
    

    相关文章

      网友评论

          本文标题:自动装箱拆箱

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