Java具有基元,因为使用它们比基于类的对应物导致更多efficient, readable, and less error prone code。
Kotlin是否执行编译时优化以确保数字操作与Java原语在同一级别(或更好)执行?
答案 0 :(得分:3)
是的,Kotlin也使用原语。但请注意:
“不易出错”的原因并不适用于Kotlin:盒装类型不可为空,除非你要求它(就像原语一样)并且你不能混淆{{1} }和==
。
“更具可读性”也不是:您可以将运算符与两者结合使用。
“效率更高”的部分非常适用,但您不能在链接问题的最佳答案中提到单字符印刷错误:您必须编写equals
才能获得盒装型!
另一方面,您需要注意java.lang.Long
比IntArray
(对应于Java Array<Int>
和int[]
)更有效率,尽管两者似乎都在使用java.lang.Integer[]
。
答案 1 :(得分:2)
引用docs:
某些类型可以有一个特殊的内部表示 - 例如,数字,字符和布尔值可以在运行时表示为原始值 - 但对于用户来说,它们看起来像普通的类。在本节中,我们将介绍Kotlin中使用的基本类型:数字,字符,布尔值,数组和字符串。
所以是的,编译器确实以在运行时使用JVM primitive types的方式进行优化。当然有一些例外:
在Java平台上,数字被物理存储为JVM基元类型,除非我们需要可空的数字引用(例如Int?)或涉及泛型。在后一种情况下,数字是装箱的。
源文档中也有提示,例如: Int
:
表示32位有符号整数。在JVM上,此类型的非可空值表示为基本类型int的值。