使用Kotlin的数字操作是否像Java原语一样快?

Java有原始语言,因为使用它们会导致比基于类的对应语言更高效,可读和更少错误的代码 。

Kotlin是否执行编译时优化以确保编号操作与Java基元相同(或更好)的性能?

是的,Kotlin也使用原始的。 但请注意:

  1. “较少容易出错”的原因在Kotlin中并不适用:除非你要求它,否则盒装types是不可以空的(就像原语一样),你不能混淆==equals

  2. “更具可读性”:你可以在两者上使用运算符。

  3. “更高效”的部分是非常适用的,但是你不能在链接的问题的最上面的答案中提到的一个字符的印刷错误:你必须编写java.lang.Long来获得盒装types!

另一方面,尽管两者都显示为使用Int ,但您仍需要注意IntArrayArray (对应于Java int[]java.lang.Integer[] )更有效。

引用文档 :

一些types可以有一个特殊的内部表示 – 例如,数字,字符和布尔值可以在运行时表示为原始值 – 但对于用户来说,它们看起来像普通的类。 在本节中,我们将介绍Kotlin中使用的基本types:数字,字符,布尔值,数组和字符串。

所以是的,编译器会在运行时使用JVM基元types进行优化。 当然有一些例外:

在Java平台上,除非我们需要一个可为空的数字引用(例如Int?)或涉及generics,否则数字在物理上存储为JVM基本types。 在后者的情况下,数字是盒装的。

源文档中还有一个提示,例如Int

表示一个32位有符号整数。 在JVM上,这种types的非空值被表示为基本typesint的值。