为什么Kotlin'==='引用相等运算符对相同的对象引用返回false?
例子来自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
我理解了上面的例子。但是,当我的值更改一个和b从100到1000,输出变为假的真象下面这样:
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),因此,如果装箱小整数会得到相同的对象,但如果装箱大整数则会得到不同的对象。
THE END
二维码