如何解释这些Kotlin代码关于' Int'类型?

时间:2018-01-27 02:44:46

标签: kotlin

var a: Int = 10000
var b: Int = 10000
print(b === a) // Prints 'true'

官方文档说:"当且仅当a和b指向同一个对象时,a === b才会计算为真。"

在上面的代码中," s"同一个对象"?

2 个答案:

答案 0 :(得分:1)

=== 表示我们必须检查对象之间的引用相等性。

var a: Int = 10000
var b: Int = 10000
print(b === a) 

打印 true ,因为对ab变量的引用相同。它实际上不是一个对象。由于ab的值相同,因此它们的引用也相同。 ab指的是相同的内存分配,因为它们的值相同。 ab是原始类型变量。所以,你会得到一个警告

  

不推荐使用Int和Int类型的参数的标识相等。

var c = Integer(10000)
var d = Integer(10000)
print(d === c)

它打印 false ,因为cd是两个不同的Integer对象。因此,对cd的引用也不同。

答案 1 :(得分:0)

如何存储数据

如果你想象在JVM中有两种类型直接存储:

  • 原始类型[IntLong]

    这些存储为值

  • 参考类型[StringObject]

    这些存储为对象的引用

===如何运作

===比较内存中的值,因此对于引用类型,它检查它们引用相同的对象,而对于基本类型,它检查它们是否具有相同的值。

为什么Int是原始对象

Kotlin存储的类型可以作为基元存储为基元作为优化,因此Int是原始的,而Int?将存储为引用类型。