`
forenroll
  • 浏览: 12079 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

关于java泛型的疑惑

    博客分类:
  • 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,这个有点不理解了。不知有没有高手出来释疑解惑一下?

 

 

 

分享到:
评论

相关推荐

    解决java中的疑惑

    在Java编程语言中,有很多细节和特性可能会...通过深入学习和实践,初学者可以逐渐克服这些疑惑,成为一名熟练的Java开发者。"JAVA解惑.pdf"这份文档很可能详细阐述了这些问题,建议仔细阅读,以便更好地理解Java编程。

    Java解惑(中文).pdf

    8. **泛型**:Java泛型引入了类型安全,增强了代码的可读性和可维护性。书中会探讨泛型的基本概念,通配符,以及在设计API时如何有效地使用泛型。 9. **模块化系统**:Java 9引入了模块系统(Project Jigsaw),...

    Java编程思想 Thinking in Java 课后习题答案

    4. **泛型**:泛型的引入增强了类型安全,习题会涵盖泛型类、泛型方法、通配符等方面,答案将展示如何编写和使用泛型代码。 5. **多线程**:Java提供了丰富的多线程支持,习题可能涉及到线程的创建、同步、通信等...

    java编程思想练习答案 the think in Java Annotated Solution Guide

    《Java编程思想》是 Bruce Eckel 的经典之作,它深入浅出地介绍了Java这门强大的编程语言。...通过对照书本和答案,你可以独立完成练习,也可以查找疑惑,这对于学习和进阶Java编程都是非常有价值的资源。

    Thinking in Java 4th Edition习题答案

    这本书深入浅出地讲解了Java语言的核心概念和技术,包括面向对象编程、泛型、集合框架、多线程、网络编程等。本书的习题答案是学习过程中不可或缺的参考资料,可以帮助读者检验自己的理解并解决疑惑。 习题解答通常...

    最新版的Java-解惑

    《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和...以上知识点只是《Java解惑》中的一部分,通过深入学习和实践,你可以逐步解开Java编程中的种种疑惑,成为一名更优秀的Java开发者。

    Java常见问题集锦 java_faq.rar

    本压缩包“java_faq.rar”包含了关于Java编程的常见问题集锦,旨在帮助开发者解决在学习和实践中遇到的问题。 “Java常见问题集锦.pdf”很可能是文档形式的问题解答大全,它可能涵盖了以下几个方面: 1. **基础...

    一些Java中不为人知的特殊方法.docx

    桥接方法是Java泛型和类型擦除的产物。当泛型方法的实现需要与非泛型接口兼容时,编译器会生成桥接方法来桥接泛型和非泛型之间的差异。例如,假设有一个泛型接口: ```java public interface MyInterface&lt;T&gt; { ...

    Java语言程序设计进阶篇答案与代码

    这份"Java语言程序设计进阶篇答案与代码"资源将帮助你巩固以上知识点,通过实际代码示例加深理解,解决练习题疑惑,提升编程能力。学习过程中,你可以对照代码理解讲解,结合实际运行结果,加深对Java语言特性的掌握...

    JAVA-FAQ.rar_The Java FAQ_java编程

    这份名为"JAVA-FAQ.rar_The Java FAQ_java编程"的压缩包提供了一个Java编程的常见问题解答集锦,帮助开发者解决他们在编程过程中可能遇到的疑惑。"JAVA FAQ.pdf"是其中的主要文档,包含了丰富的知识内容。 首先,这...

    4,JAVA解惑 高清PDF 下载

    《JAVA解惑》是Java开发者领域的一本经典著作,它被广大...总之,《JAVA解惑》是一本涵盖了Java核心知识点、实战技巧和高级特性的宝典,无论你是Java新手还是老手,都能从中受益匪浅,解决你在Java编程中的种种疑惑。

    Thing in Java\Thinking in Java 3rd Edition英文版,书后答案及代码

    8. **泛型**:自Java 5引入,泛型提供了编译时类型安全,允许在容器中存储特定类型的元素。 9. **反射**:Java反射API允许程序在运行时动态地获取类的信息并操作类的对象。 10. **枚举和注解**:枚举提供了一种...

    JAVA解惑

    13. **Java泛型**:理解泛型的引入和使用,以及泛型通配符和边界。 14. **枚举和注解**:介绍枚举类型的应用,以及注解的作用和自定义注解。 15. **Java 8新特性**:讲解Lambda表达式、函数式接口、Stream API等...

    (官方)Java语言程序设计(原书第8版)基础篇和进阶篇复习题和编程题答案

    本资料集合了这些题目及其详尽的答案,旨在帮助读者巩固所学知识,解决在学习过程中遇到的疑惑。 1. **基础篇复习题**:这部分涵盖了Java语言的基本语法、数据类型、控制结构(如if语句、for循环和while循环)、...

    java解惑java解惑java解惑

    在Java的世界里,疑惑可能涵盖语法、类库、框架、并发、内存管理等多个方面。下面,我们将深入探讨一些常见的Java解惑知识点。 1. **Java基础** - **变量与数据类型**:Java支持基本数据类型(如int、double等)和...

    thinging in java 第四版 英文版

    5. **泛型**:Java 5引入的泛型是一种强大的类型系统增强,它允许在编译时检查容器中的对象类型,减少类型转换的麻烦,提高代码的健壮性。 6. **异常处理**:异常处理是Java编程中的重要部分,书中详细解释了try-...

    think in java 4 练习题答案

    6. **泛型**:泛型引入于Java 5,用于增强类型安全并消除强制类型转换。泛型可以应用于类、接口和方法,提供了一种在编译时检查类型安全的方式。 7. **IO流**:Java的IO流用于处理输入输出操作,包括字符流和字节流...

    Java语言程序设计基础篇源代码

    Java语言是目前世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。...同时,课后答案部分可以帮助验证理解和解决疑惑,提高学习效率。在实践中不断练习和应用,将有助于成为熟练的Java开发者。

    数据结构与算法分析_Java语言描述(第2版)及习题答案.zip

    例如,Java中的接口和抽象类可以用于实现各种数据结构,而泛型则提供了类型安全的容器。 习题答案部分则是学习过程中不可或缺的一部分。通过解答书中给出的习题,读者可以检验自己的理解,解决疑惑,并且通过对比...

    Java解惑(帮你深入地了解Java)

    下面将详细探讨一些常见的Java知识点,以解答可能出现的疑惑。 1. **内存管理与垃圾回收**:Java通过自动垃圾回收机制管理内存,避免了程序员手动释放内存可能导致的问题。理解对象生命周期、引用类型(强引用、软...

Global site tag (gtag.js) - Google Analytics