var a: Int = 10000
var b: Int = 10000
print(b === a) // Prints 'true'
官方文档说:"当且仅当a和b指向同一个对象时,a === b才会计算为真。"
在上面的代码中," s"同一个对象"?
答案 0 :(得分:1)
===
表示我们必须检查对象之间的引用相等性。
var a: Int = 10000
var b: Int = 10000
print(b === a)
打印 true ,因为对a
和b
变量的引用相同。它实际上不是一个对象。由于a
和b
的值相同,因此它们的引用也相同。 a
和b
指的是相同的内存分配,因为它们的值相同。 a
和b
是原始类型变量。所以,你会得到一个警告
不推荐使用Int和Int类型的参数的标识相等。
var c = Integer(10000)
var d = Integer(10000)
print(d === c)
它打印 false ,因为c
和d
是两个不同的Integer对象。因此,对c
和d
的引用也不同。
答案 1 :(得分:0)
如果你想象在JVM中有两种类型直接存储:
原始类型[Int
,Long
]
这些存储为值
参考类型[String
,Object
]
这些存储为对象的引用
===
如何运作 ===
比较内存中的值,因此对于引用类型,它检查它们引用相同的对象,而对于基本类型,它检查它们是否具有相同的值。
Int
是原始对象 Kotlin存储的类型可以作为基元存储为基元作为优化,因此Int
是原始的,而Int?
将存储为引用类型。