Java和C#的泛型比较_Java和C#的泛型有什么区别
程序员文章站
2022-01-22 07:09:27
...
C#的泛型:
C#泛型类在编译时,先生成中间代码IL,通用类型T只是一个占位符
在实例化类时,根据用户指定的数据类型代替T并由即时编译器(JIT)生成本地代码
这个本地代码中已经使用了实际的数据类型,等同于用实际类型写的类
所以不同的封闭类的本地代码是不一样的
按照这个原理,我们可以这样认为:
泛型类的不同的封闭类是分别不同的数据类型
java的泛型
对java虚拟机来说是没有泛型类的
java编译器在编译泛型类是会用泛型类的左边第一个限定类去替换
eg: ArrayList<T extend a & b>
编译后ArrayList的所以T会被a 去替换
但put数据是、编译器会检查put的数据是不是a类型的
但get数据时、他会返回a类型的数据.并添加类型转换代码(这样效率就低了)
eg: ArrayList<News> arrayList=new ...; arrayList.get(0);
编译器会返回 a类型的数据、然后把 数据转换成News数据
总之java没有泛型类、在编译后都是基本的类型、并加类类型转换