自动装箱/自动拆箱及反编译观察

集合中只能装入引用数据类型,不能装入基本数据类型。如,装入int类型的数值123会自动装箱。

下面是源码:

package com.test;

import java.util.ArrayList;
import java.util.List;

public class Test {
     public static void main(String[] args) {
         //下面的泛型会擦除
         List<Integer> list = new ArrayList<>(6);
         //下面会触发编译器自动装箱
         list.add(1);
         //下面会触发编译器自动拆箱
         int i = list.get(0);             
    }
}

 编译,接着使用反编译工具打开字节码文件,得到java源文件如下:

package com.test;

import java.util.ArrayList;
import java.util.List;

public class Test
{
  public static void main(String[] args)
  {
    List list = new ArrayList(6);

    list.add(Integer.valueOf(1));

    int i = ((Integer)list.get(0)).intValue();
  }
}

总结:我们看到注释和泛型在字节码文件里是被过滤掉的,看不到的——注释是源码级别的。

   而自动装箱和自动拆箱是加上去的,可以看到的——自动装箱/拆箱是字节码文件级别的。

posted @ 2017-03-25 23:11  zhuangrunwei  阅读(216)  评论(0编辑  收藏  举报