使用Kotlin的数字操作和Java原语一样快吗?

时间:2017-10-23 15:19:30

标签: java jvm kotlin primitive

Java具有基元,因为使用它们比基于类的对应物导致更多efficient, readable, and less error prone code

Kotlin是否执行编译时优化以确保数字操作与Java原语在同一级别(或更好)执行?

2 个答案:

答案 0 :(得分:3)

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

  1. “不易出错”的原因并不适用于Kotlin:盒装类型不可为空,除非你要求它(就像原语一样)并且你不能混淆{{1} }和==

  2. “更具可读性”也不是:您可以将运算符与两者结合使用。

  3. “效率更高”的部分非常适用,但您不能在链接问题的最佳答案中提到单字符印刷错误:您必须编写equals才能获得盒装型!

  4. 另一方面,您需要注意java.lang.LongIntArray(对应于Java Array<Int>int[])更有效率,尽管两者似乎都在使用java.lang.Integer[]

答案 1 :(得分:2)

引用docs

  

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

所以是的,编译器确实以在运行时使用JVM primitive types的方式进行优化。当然有一些例外:

  

在Java平台上,数字被物理存储为JVM基元类型,除非我们需要可空的数字引用(例如Int?)或涉及泛型。在后一种情况下,数字是装箱的。

源文档中也有提示,例如: Int

  

表示32位有符号整数。在JVM上,此类型的非可空值表示为基本类型int的值。