`
答案在风中
  • 浏览: 65205 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 伪泛型与c#真实泛型思考

阅读更多

沃日,不知道被那本书忽悠了,下面两种方式使用泛型其实性能上没有差别,区别的只是自己手动写强制类型转换或者是编译器做强制类型转换(语法糖解析)。。。我就奇怪了这个cast操作怎么会省掉了。。。

List a=new LinkedList<String>();
String s=(String)a.get(1);
List<String> b=new LinkedList<String>();
s=b.get(1);对应的bytecode,经测试的确性能上没有区别。 NEW LinkedList
DUP
INVOKESPECIAL LinkedList.<init>() : void
ASTORE 1
ALOAD 1: a
ICONST_1
INVOKEINTERFACE List.get(int) : Object
CHECKCAST String 
ASTORE 2

NEW LinkedList
DUP
INVOKESPECIAL LinkedList.<init>() : void
ASTORE 3
ALOAD 3: b
ICONST_1
INVOKEINTERFACE List.get(int) : Object
CHECKCAST String 
ASTORE 2: s 

 

c#真实泛型,这个泛型信息一直保留到nativecode中,不知道如何在规避类型膨胀的前提下做到了所有引用类型只生成一份nativecode(《CLR via c#》提到这一点),如果按照这种方式实现,按照道理应该和java一样要做一次强制类型转换,性能优势何在?了解的同学不吝赐教啊,捣鼓了下反汇编还没能整清楚。。。

0
8
分享到:
评论

相关推荐

    关于C#、java泛型的看法

    相比之下,Java的泛型是在JDK 5.0中引入的,其设计思想与C#相似,但也有一些不同之处。在Java中,泛型同样使用尖括号表示,但它的类型擦除特性使得编译后的字节码并不包含类型参数信息,而是使用Object或其他基础...

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

    以下是一个简单的Java泛型示例: ```java public class Box&lt;T&gt; { private T item; // 构造函数、getters和setters } ``` 最后,C++的模板机制可视为泛型的先驱,但其工作原理有所不同。C++模板可以在类和函数...

    C# To JAVA Converter v17.10.6

    使用Java泛型转换C#ref参数 当代码中定义事件委托时转换C#事件,或者是System.Action或System.Func代理之一 将所有类型的数组从C#转换成Java 对于继承和接口的所有方面,从C#到Java的无瑕疵转换 允许自定义替换...

    Java泛型类型擦除后的补偿

    本文将深入探讨Java泛型类型擦除的概念,并介绍在类型擦除后,为了保持泛型的安全性和便利性,Java设计者所采取的一些补偿机制。 1. **类型擦除**: - 在编译期间,所有的泛型类型信息都会被替换为它们的实际类型...

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

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

    Webservice传递泛型的案例,包括web服务端和mobile端

    在这个特定的案例中,我们关注的是在Web服务(WebService)中如何处理泛型,以及如何在移动设备(mobile端)上与之交互。泛型是C#编程语言中的一个重要特性,它允许我们在代码中创建可重用的类型安全的数据结构,而...

    C# To JAVA Converter v17.10.6(最新破解版)

    2. 泛型:C#的泛型比Java更灵活,Java中的泛型是类型擦除的,转换时需要考虑类型安全性和代码效率。 3. 枚举与常量:C#的枚举是类型安全的,Java则通过类或接口实现,转换时需调整代码结构。 4. 异常处理:C#的...

    c# java互相转换工具

    6. 泛型:C#和Java的泛型语法和用法有细微差别,转换时需要注意类型约束和通配符的区别。 7. 并发处理:C#的`Task`和`async/await`与Java的`Future`和`ExecutorService`在处理并发上有不同的方式。转换时要理解各自...

    Generic Programming for Scientific Computing in C++, Java, and C#

    - **Java泛型**:Java泛型的主要特点是类型擦除,这意味着在运行时,所有泛型信息都会被擦除,只保留原始类型的信息。这种设计虽然简化了JVM的实现,但也限制了一些功能的可用性,比如无法直接操作原始类型。 - **C#...

    Silverlight与Java通信远程调用封装

    可以转换日常使用中的任意复杂类型通信,成功解决C# DateTime和Java Date传递问题,解决java容器泛型与C#容器泛型转换问题,解决复杂对象问题(对象属性是另外对象,容器中套容器)等。 欢迎大家使用,有问题,可以...

    Json与实体相互转换,支持IList泛型

    Json转换为实体;Json转换为IList;实体转换为Json;IList转换为Json;

    你真的懂Java泛型吗?

    在JDK 1.5开始引入了泛型,但Java实现泛型的方式与C++或C#差异很大。在平常写代码用到泛型时,仿佛一切都来得如此理所当然。但其实Java泛型还是有挺多tricky的东西的,编译器在背后为我们做了很多事。下面我们来看看...

    基于泛型与反射的万能数据库操作代码

    本篇文章将详细讲解如何利用泛型与反射来创建一个万能的数据库操作代码,如同标题所示,这可以极大提高代码的复用性和可维护性。 **泛型(Generics)** 泛型是Java SE 5.0引入的一个新特性,它允许在编译时检查...

    java代码转c#

    2. **数据类型**:Java有原始数据类型(如int, double),C#同样有这些类型,但C#还提供了结构体(struct)和枚举(enum),它们在内存管理和使用上与Java的类有所不同。 3. **异常处理**:Java使用`try-catch-...

    xe7结构体泛型

    在本文中,我们将深入探讨"xe7结构体泛型"这一主题,这是一种特定于某个编程环境(可能是C#或Java等语言)的概念,用于提升代码的灵活性和类型安全性。 泛型主要在类、接口和方法中使用,它通过参数化类型来实现。...

    浅谈java泛型的作用及其基本概念

    Java泛型是JDK5.0引入的一项重要特性,它为集合框架和其他容器类提供了类型安全,提高了代码的可读性和可重用性。本文将深入探讨Java泛型的作用及其基本概念。 首先,泛型的基本概念是允许在定义类、接口和方法时...

    泛型实例<匿名方法实现排序与查找>

    总之,这个“泛型实例&lt;匿名方法实现排序与查找&gt;”是一个很好的实践,它涵盖了C#编程中的一些重要概念,包括泛型的使用、匿名方法的定义以及如何在实际应用中结合这两者进行数据操作。通过这个实例,你不仅能深化对...

Global site tag (gtag.js) - Google Analytics