首页 > 试题广场 >

在开发中使用泛型取代非泛型的数据类型(比如用ArrayLis

[单选题]
在开发中使用泛型取代非泛型的数据类型(比如用ArrayList<String>取代ArrayList),程序的运行时性能会变得更好。() 
  • 正确
  • 错误

这篇文章看到的一个解释:

泛型仅仅是java的语法糖,它不会影响java虚拟机生成的汇编代码,在编译阶段,虚拟机就会把泛型的类型擦除,还原成没有泛型的代码,顶多编译速度稍微慢一些,执行速度是完全没有什么区别的.

发表于 2017-05-04 10:03:05 回复(11)
使用泛型的好处
1,类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。

 

2,消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。

 

3,潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。

所以泛型只是提高了数据传输安全性,并没有改变程序运行的性能
发表于 2018-06-03 18:08:50 回复(36)
泛型只在编译的时候保证数据类型的正确性,和运行期间的性能无关
发表于 2017-08-07 09:28:51 回复(0)
在jdk帮助文档上找到的
Generics are implemented by type erasure: generic type information is present only at compile time, after which it is erased by the compiler.
发表于 2018-03-26 09:28:57 回复(0)
我想问,使用泛型提升了程序的健壮性,不算是提升性能么?
发表于 2017-06-30 10:29:21 回复(5)
泛型仅仅是java的语法糖,它不会影响java虚拟机生成的汇编代码,在编译阶段,虚拟机就会把泛型的类型擦除,还原成没有泛型的代码,顶多编译速度稍微慢一些,执行速度是完全没有什么区别的。
发表于 2019-09-09 21:38:13 回复(0)
简言之,使用泛型时,因为其类型是固定某一个类型,不需要拆箱装箱的值到引用类型的转换,而非泛型反之。

发表于 2017-05-04 20:33:12 回复(0)
泛型提高了数据传输安全性,无法改变程序运行的性能
发表于 2021-12-11 17:24:42 回复(0)
一句话,Java在运行时会有泛型擦除机制
发表于 2020-04-28 19:58:04 回复(0)
泛型只是提高了数据传输安全性,并没有改变程序运行的性能
发表于 2022-05-30 16:39:46 回复(0)
泛型只是保证了数据类型安全
发表于 2022-03-11 22:17:20 回复(0)
1.泛型是jdk1.5出现的语法糖,可以在javac编译器编译时做类型检查,大大减少运行时类型转换异常(ClassCastException).
2.泛型虽然被擦除了,但是变量的属性表的Signature属性里面依然保留泛型信息.
发表于 2020-02-18 13:30:50 回复(0)
泛型只是限制编译阶段的数据类型,编译后泛型就早已被擦除了,并不会影响java虚拟机运行时的效率
发表于 2019-08-26 19:47:16 回复(0)
性能,这个词语,难道单指速度吗?
准确性,甚至可读性、美观性,也隶属于性能的范畴。
发表于 2019-02-02 14:42:27 回复(0)
Java 编译器在编译泛型时会自动加入类型转换的编码,故运行速度不会因为使用泛型而加快。
发表于 2018-02-05 20:02:55 回复(0)
泛型减少强制类型转化的次数,性能提没提高自己没点数吗
发表于 2018-01-01 20:24:56 回复(1)
没使用泛型时不是会面临一个拆箱的过程吗?这不需要时间??????
发表于 2017-09-03 20:03:18 回复(0)
使用泛型,影响的是程序编译效果,编译会稍微慢一些。但是不影响程序运行
发表于 2017-08-29 16:30:54 回复(0)
有个例子可以提升性能,比如先说没有用泛型的情况,map的遍历,先获得entrySet,用增强for循环进行遍历,每个object类型要先强制转成Map.Entry的类型(自己可以上机试试,看看HashMap的源码,这里没手动使用泛型,但底层默认是自动传入Object作为泛型) 但用泛型以后,少了强制类型转换,效率性能自然提高,比如遍历炒鸡大的数据量,需要强转和不需要强转的区别就很明显了。
发表于 2023-09-27 16:03:34 回复(0)

这个说法是错误的。
使用泛型可以提高代码的可读性和安全性,但并不会直接提高程序的运行时性能。在编译时,Java 编译器会将泛型代码转换为非泛型代码,这个过程称为类型擦除(Type Erasure)。在运行时,泛型信息已经被擦除,程序执行时并不会对泛型类型进行额外的检查或处理。
因此,使用泛型取代非泛型的数据类型并不会直接提高程序的运行时性能。但是,使用泛型可以避免一些类型转换错误,从而提高程序的健壮性和可维护性。

发表于 2023-04-27 16:57:30 回复(0)