Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 性能,Java泛型_C#_Java_Generics - Fatal编程技术网

C# 性能,Java泛型

C# 性能,Java泛型,c#,java,generics,C#,Java,Generics,Java中的泛型是否比集合具有性能优势 例如,在C#中有一个性能优势,因为它有助于避免装箱/拆箱,但据我所知,在Java中,在字节码级别上没有泛型的“概念”,因此编译后它具有与集合相同的字节码 那么说没有性能优势是对的吗?你说得对: 在Java中,在字节码级别没有泛型的“概念” 因此,Java中的泛型没有性能增益。没有性能优势,只有类型安全编程:) 那么说没有性能优势是正确的吗 虽然没有那么清楚,但总的来说,你是对的。在Java中,泛型只是编译器在后台为您执行所有转换的一种好方法 尽管如此,编译

Java中的泛型是否比集合具有性能优势

例如,在C#中有一个性能优势,因为它有助于避免装箱/拆箱,但据我所知,在Java中,在字节码级别上没有泛型的“概念”,因此编译后它具有与集合相同的字节码


那么说没有性能优势是对的吗?

你说得对:

在Java中,在字节码级别没有泛型的“概念”


因此,Java中的泛型没有性能增益。

没有性能优势,只有类型安全编程:)

那么说没有性能优势是正确的吗

虽然没有那么清楚,但总的来说,你是对的。在Java中,泛型只是编译器在后台为您执行所有转换的一种好方法


尽管如此,编译器最终可能会使用比您自己实现的更好的强制转换方法,在任何地方传递
对象。

我认为此链接非常有用

正如您在C#中所说的,性能将受益于泛型,因为泛型可以帮助您避免装箱/拆箱。 究其深层原因,是.NET泛型支持值类型,但Java泛型不能处理基元类型,这就是为什么它不能消除装箱/取消装箱的开销


但仍然有编译时类型检查,代码中不需要显式强制转换

泛型强制执行类型检查的编译时验证,但编写操作对象的字节码。因此,当代码运行时,
List
是一个
List
,但不允许您
List.add(new Date(…)
,因为编译器会阻止您忽略泛型类型


由于在后台运行List As List,与未绑定的泛型理解数据结构相比,泛型在运行时绝对没有性能优势或劣势。

Java泛型对性能的影响很小,因为它们是一种静态类型检查功能,并且在运行时不太存在。它们确实添加了一些您在非泛型版本中可能忽略的类型转换


然而,作为编译时特性也意味着它们在运行时不会保留多余的信息。额外的记帐会对性能产生一些负面影响。

它只是隐式地执行类型转换,而不是要求用户手动执行。如果您要求性能差异,则说明您做得不对(tm)。@delnan:如果您引用Knuth,则说明您做得不对(c)。