java 伪泛型与c#真实泛型思考_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java 伪泛型与c#真实泛型思考

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

 2013/8/20 3:33:20  答案在风中  程序员俱乐部  我要评论(0)
  • 摘要:沃日,不知道被那本书忽悠了,下面两种方式使用泛型其实性能上没有差别,区别的只是自己手动写强制类型转换或者是编译器做强制类型转换(语法糖解析)。。。我就奇怪了这个cast操作怎么会省掉了。。。Lista=newLinkedList<String>();Strings=(String)a.get(1);List<String>b=newLinkedList<String>();s=b.get(1);对应的bytecode,经测试的确性能上没有区别
  • 标签:C# Java 泛型

沃日,不知道被那本书忽悠了,下面两种方式使用泛型其实性能上没有差别,区别的只是自己手动写强制类型转换或者是编译器做强制类型转换(语法糖解析)。。。我就奇怪了这个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一样要做一次强制类型转换,性能优势何在?了解的同学不吝赐教啊,捣鼓了下反汇编还没能整清楚。。。

发表评论
用户名: 匿名