例子来自Kotlin官网
val a: Int = 100
val boxedA: Int? = a
val anotherBoxedA: Int? = a
val b: Int = 100
val boxedB: Int? = b
val anotherBoxedB: Int? = b
println(a === a) // true
println(boxedA === anotherBoxedA) // true
println(boxedB === anotherBoxedB) // true
我理解上面的例子。 但是当我将 a 和 b 的值从 100 更改为 1000 时,输出更改为 从 true 到 false 如下所示:
val a: Int = 1000
val boxedA: Int? = a
val anotherBoxedA: Int? = a
val b: Int = 1000
val boxedB: Int? = b
val anotherBoxedB: Int? = b
println(a === a) // true
println(boxedA === anotherBoxedA) // false
println(boxedB === anotherBoxedB) // false
任何人都可以通过将值从 100 更改为 1000 来提供帮助,为什么 === 运算符的输出会发生变化?
自动装箱方面发生了什么?
最佳答案
自动装箱为小整数(我猜最多 127)使用缓存,因此,如果您装箱一个小整数,您会得到相同的对象,但如果您装箱一个大整数,则会得到不同的对象。
关于kotlin - 为什么 Kotlin '===' 引用相等运算符对相同的对象引用返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66085066/