关于java泛型的疑惑

今天看了一下java的泛型,在网上找到一片文章:

java 泛型 深入

http://www.blogjava.net/fancydeepin/archive/2012/08/25/386241.html

文章作者fancydeepin

fancydeepin在文中说,“运行期间泛型并不存在,它在编译完成之后就已经被擦除了。”,并都给出了例子。

但是我试验过后发现泛型并没有在编译完成之后就被擦除。

试验环境:CentOS6.2,Oracle JDK 1.7.0_40,JD-GUI0.3.5

下面是我的试验代码(根据fancydeepin的修改的):

package forenroll;

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

public class Test {

	List<Integer> interview = new ArrayList<Integer>();
	public void test(List<String> list){
		List<String>    list1 = new ArrayList<String>();
        List<Integer> list2 = new ArrayList<Integer>();
        System.out.println(list1.getClass() == list2.getClass()); // 输出结果: true
        System.out.println(list1.getClass() == interview.getClass()); // 输出结果: true
        System.out.println(list1.getClass().getName()); // 输出结果: java.util.ArrayList
        System.out.println(list2.getClass().getName()); // 输出结果: java.util.ArrayList
	}
	public static void main(String[] args) {

		List<String>    list1 = new ArrayList<String>();
        List<Integer> list2 = new ArrayList<Integer>();
        Test test = new Test(); 
        test.test(list1);

	}

}

 运行结果:

true
true
java.util.ArrayList
java.util.ArrayList

 

 

JDK自带的javap命令反编译的结果:

[forenroll@forenroll forenroll]$ javap Test
Warning: Binary file Test contains forenroll.Test
Compiled from "Test.java"
public class forenroll.Test {
  java.util.List<java.lang.Integer> interview;
  public forenroll.Test();
  public void test(java.util.List<java.lang.String>);
  public static void main(java.lang.String[]);
}

 main方法里面的两句代码不知道为什么没有反编译出来。但是我用jd-gui这个工具反编译出来的结果里面是有的,jd-gui反编译结果如下:

package forenroll;

import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;

public class Test
{
  List<Integer> interview = new ArrayList();

  public void test(List<String> list) { List list1 = new ArrayList();
    List list2 = new ArrayList();
    System.out.println(list1.getClass() == list2.getClass());
    System.out.println(list1.getClass() == this.interview.getClass());
    System.out.println(list1.getClass().getName());
    System.out.println(list2.getClass().getName()); }

  public static void main(String[] args)
  {
    List list1 = new ArrayList();
    List list2 = new ArrayList();
    Test test = new Test();
    test.test(list1);
  }
}

 

 

       根据通过javap命令和jd-gui工具之间的反编译结果,fancydeepin的通过反编译的结果来说泛型在编译后被擦出了,这个说法不太妥。

       但是那两个类型比较的结果又是ture,这个有点不理解了。不知有没有高手出来释疑解惑一下?

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值