什么操作员'==='在Kotlin做什么?它是如何工作的?我们可以检查参考平等吗?
val a: Int = 10000
print(a === a) // Prints 'true'
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA === anotherBoxedA) // !!!Prints 'false'!!!
但以防万一:
var a : Int = 1000
var b : Int = 1000
println(a === b) // print 'true' !!!
val a: Int = 1000
和 val b: Int = 1000
不在 -128..127
范围内,但仍然 ===
为真或编译器在某些情况下理解它可以取一个值?
1 回答
如documented,它代表 Referential Equality :
引用相等意味着两个引用指向同一个对象 . 每个实例:
将其与下面的Java代码进行比较:
你的例子:
另外,如documented here,"boxing of numbers does not preserve identity" . 所以,
boxedA
将有一个身份,但anotherBoxedA
将有另一个身份 . 两者都有结构平等,但没有参照平等 .但为什么第二个有效?因为Kotlin
Int
类型对应于Javaint
类型 . 在第二个示例中比较的两个变量是基本类型值,而不是对象 . 因此,对于它们,引用相等与正则相等完全相同 .