`
答案在风中
  • 浏览: 65565 次
  • 性别: 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++模板可以在类和函数...

    Java泛型类型擦除后的补偿

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

    C# To JAVA Converter v17.10.6

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

    细细品味C#(泛型专题)

    - **C# 与 Java 泛型的区别与优劣** 在 IT 领域,尤其是面向对象编程语言中,C# 和 Java 均提供了泛型支持来增强程序的类型安全性和复用性。尽管 C# 2.0 和 Java 5.0 都引入了泛型,但两者之间存在着一些差异。...

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

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

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

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

    品味C#(泛型专题)

    #### 关于C#与Java泛型的比较 C#与Java作为两大主流编程语言,在泛型的实现上各有千秋,但C#自2.0版本起引入的泛型特性,无疑使其在类型安全性和代码重用性方面迈出了重要的一步。《品味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`在处理并发上有不同的方式。转换时要理解各自...

    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等语言)的概念,用于提升代码的灵活性和类型安全性。 泛型主要在类、接口和方法中使用,它通过参数化类型来实现。...

    C#泛型专题

    - **Java 5 的泛型实现:**尽管 Java 5 开始支持泛型,并且在正式发布时间上早于 C# 2.0,但其泛型机制在初学阶段可能会让开发者感到困惑。例如,Java 提供了 `extends` 和 `super` 关键字来限定泛型参数的上下界,...

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

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

Global site tag (gtag.js) - Google Analytics