为什么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

我理解了上面的例子。但是,当我的值更改一个b1001000,输出变为象下面这样:

    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'==='引用相等运算符对相同的对象引用返回false?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>