Kotlin是否具有原始类型?

Min*_*yen 1 reference-type primitive-types kotlin

Kotlin是否具有原始类型?当我声明变量时:val myAge: Int = 18那么myAge变量存储的实际值是18还是将对象的地址存储在内存中?如果Int是原始类型,那为什么我们可以使用它的方法myAge.minus(10)呢?

图片来源:stackoverflow.com

Dem*_*god 7

简短回答 -是的,取决于声明。

val myAge: Int = 18           // this is primitive
val myAge2: Int? = 18         // this is not
Run Code Online (Sandbox Code Playgroud)

有一个关于该https://www.youtube.com/watch?v=Ta5wBJsC39s 的信息量很大的视频

  • Minus 实际上是一个运算符函数(`public operator fun minus(other: Int): Int`),这意味着它与 `myAge - 10` 相同 (3认同)
  • 如果 `Int` 是原始类型,那么为什么我们可以使用它的方法,如 ```myAge.minus(10)?``` (2认同)
  • 您将在其中声明此运算符重载方法。显然在类内部,所以 (Int) 怎么可能是原始类型。 (2认同)

Cil*_*ing 6

不,是的。

Kotlin没有原始类型(我的意思是您不能直接声明原始)。它使用类,比如IntFloat作为一个基元对象封装。

当kotlin代码转换为jvm代码时,只要有可能,“原始对象”就会转换为java原语。在某些情况下,这无法完成。这些情况是例如“原始语”的集合。例如,List<Int>不能包含原语。因此,编译器知道何时可以将对象转换为原始对象。而且,它与java非常相似:

List<Integer> numbers = new ArrayList<>;

numbers.add(0); // <-- you use primitive, but in fact, JVM will convert this primitive to object.
numbers.add(new Integer(0)); // <-- We don't need do that.
Run Code Online (Sandbox Code Playgroud)

另外,当您声明“可空基元”时,它永远不会转换为基元(这很明显,因为基元不能为空)。在Java中,它的工作原理非常相似:

int k = null; // No way!
Integer kN = null; // That's OK.
Run Code Online (Sandbox Code Playgroud)

还有一件事-文档对此有何评论?

对于Common,JVM,JS

表示一个32位有符号整数。在JVM上,此类型的非空值表示为原始类型int的值。

对于本地人

表示一个32位有符号整数。

@see:https : //kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html

所以,最后一个结论。Kotlin没有开箱即用的原始类型。您将所有对象都视为对象。转换为原语比代码要低一些。使该设计保持与JVM的兼容性。

  • 嗯 更直接地说:** Kotlin语言没有基元;它的实现可以在可能的情况下使用它们。**在JVM上,这通常意味着值不可为空且未被引用。 (2认同)