`
xiaoxubuaa
  • 浏览: 6578 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java 中的泛型与 C++ 模板的比较

阅读更多

      GJ(Generic Java,java泛型) 程序的语法在表面上与 C++ 中的模板非常类似,但是二者之间有着本质的区别。

      首先,Java 语言中的泛型不能接受基本类型作为类型参数――它只能接受引用类型。这意味着可以定义 List<Integer>,但是不可以定义 List<int>。

      其次,在 C++ 模板中,编译器使用提供的类型参数来扩充模板,因此,为 List<A> 生成的 C++ 代码不同于为 List<B> 生成的代码,List<A> 和 List<B> 实际上是两个不同的类。而 Java 中的泛型则以不同的方式实现,编译器仅仅对这些类型参数进行擦除和替换。类型 ArrayList<Integer> 和 ArrayList<String> 的对象共享相同的类,并且只存在一个 ArrayList 类。

 

分享到:
评论

相关推荐

    Java1.5泛型指南中文版

    例如,Java的泛型实现了类型擦除,这意味着编译后的字节码中不会保留类型参数信息,而C++模板会在编译时为每种不同的类型生成不同的实例。 ### 2. 定义简单的泛型 #### 创建泛型类 泛型类是一种带有类型参数的类,...

    多角度Java中的泛型

    8. **与C++模板的区别**:虽然Java泛型和C++模板在概念上相似,但两者在实现和使用上有显著差异。模板是在编译时进行实例化的,而Java泛型则在编译后进行类型擦除。此外,Java泛型不支持模板的模板,即不能在泛型中...

    C++ STL Java泛型程序设计(WORD)

    通过这次实验,学生不仅可以学习到泛型的基本概念,还能深入理解C++ STL和Java泛型在实际编程中的应用。泛型使我们能够编写更通用的代码,减少冗余,提高代码复用性,同时保证类型安全。对于大型项目而言,这能显著...

    CPlus_to_Java_Converter;C++转java工具

    3. **模板与泛型**:C++的模板提供了静态多态,而Java通过泛型实现了类似功能。转换器需要将模板转换为Java的泛型,但要注意Java泛型的边界和限制。 4. **异常处理**:C++的异常处理与Java的有所不同。转换器需要将...

    C++泛型编程:源起、实现与意义 免积分

    #### 模板与宏的比较 尽管宏在某种程度上也能实现类型参数化,但它并不是理想的解决方案。宏的主要问题是它们不在C++的语法层面上工作,而是由预处理器处理。这意味着宏不会受到C++编译器的类型检查保护,容易导致...

    快速了解泛型(C#,JAVA,C++)

    C++模板可以在类和函数级别使用,甚至可以有模板模板。例如,一个简单的泛型栈可以这样实现: ```cpp template class Stack { private: std::vector&lt;T&gt; elements; public: void push(const T& value); T pop();...

    解析Java泛型的类型擦除.pdf

    Java 泛型是 Java SE 1.5 的新特性,它们在语法和应用环境上与 C++ 中的模板相似,但是本质上它们之间有着区别,这种区别就在于 Java 泛型的类型擦除。 Java 泛型的类型擦除是 Java 语言中的一种机制,它使得泛型...

    支持多线程和泛型的阻塞队列

    阻塞队列是一种在多线程编程中广泛使用的并发数据结构,它在计算机科学和编程领域,特别是Java和C++等面向对象语言中扮演着重要角色。标题中的“支持多线程和泛型的阻塞队列”意味着我们讨论的是一个能够同时处理多...

    面向对象编程C++和Java比较教程 中英文完整版 pdf

    C++的模板允许泛型编程,可以在编译时生成针对不同类型的代码,而Java的泛型是在运行时检查类型安全性的。 在异常处理方面,C++使用try-catch-finally结构,而Java也有类似的try-catch-finally语句块,但Java还引入...

    C++与java的综述与比较

    ### C++与Java的综述与比较 #### 引言 C++与Java都是面向对象的编程语言,Java从某种程度上来说是基于C++发展起来的,因此它们之间存在着诸多相似性和差异性。本文旨在对这两种语言进行一个全面的综述,并通过对比...

    面向对象编程C++和Java比较教程

    3. C++支持模板,允许泛型编程,而Java的泛型是类型擦除的,不提供编译时的多态性。 4. C++的异常处理使用try-catch-finally,Java同样如此,但在Java中,异常是强制性的,必须显式处理。 在从C++转向Java或反之的...

    java泛型详解

    类型擦除也是Java泛型与C++模板机制的一个主要区别。 使用泛型可以提高代码的安全性和可读性,因为它允许编译器在编译时期进行类型检查,从而避免在运行时发生类型错误。例如,在集合框架中使用泛型可以防止错误...

    Java编程语言中的泛型

    无论您是否熟悉其他编程语言中的类似结构,如C++的模板,都将通过本文获得对Java泛型深入的理解。 #### 二、泛型的基本概念 **1. 泛型的目的** 泛型的主要目的是为了提高代码的复用性和安全性。在Java中,泛型...

    泛型JAVA指南.pdf

    通过对比Java泛型和C++模板(Templates),我们可以看到两者在设计上有相似之处,但也有本质的区别。Java的泛型提供了比C++模板更严格的类型检查,但以类型擦除作为实现的代价。这意味着Java泛型在类型安全的同时...

    java泛型精华

    在Java中,泛型类型不像C++中的模板那样具有协变性。例如,`List&lt;Integer&gt;`不能自动转换为`List&lt;Number&gt;`,即使`Integer`是`Number`的一个子类。这是因为如果允许这种转换,将破坏类型安全。考虑以下代码: ```java...

    面向对象编程:C++与Java比较教程 英文版

    第13章介绍了泛型编程和模板的概念,这是C++和Java编程中的重要概念,能够提高代码的复用性和灵活性。 第14章讲解了面向对象程序的建模图示,这些图示是理解程序结构和行为的关键工具。 第15章讲述了扩展类的概念...

Global site tag (gtag.js) - Google Analytics