Kotlin 为什么是科特林'===';对于相同的对象引用,引用相等运算符是否返回false?
示例来自Kotlin官方网站Kotlin 为什么是科特林'===';对于相同的对象引用,引用相等运算符是否返回false?,kotlin,nullable,equality,boxing,autoboxing,Kotlin,Nullable,Equality,Boxing,Autoboxing,示例来自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) // t
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个),因此,如果装箱一个小整数,会得到相同的对象,但如果装箱一个大整数,会得到不同的对象。谢谢@DiegoMarin,这个链接帮助了我