Int上的Kotlin引用相等行为,其值介于-128到127之间

Qui*_*cio 3 kotlin

我要给自己直到凌晨12点才能学习并在kotlin上获得成功(希望如此).

https://kotlinlang.org/docs/kotlin-docs.pdf我试过17页上的这些片段可能有人请帮助我理解了为什么===会返回true一个值之间-128127

以下确实打印false:

val a: Int = 10000
val boxedA: Int? = a            // Integer@445
val anotherBoxedA: Int? = a     // Integer@447 why?
print(boxedA === anotherBoxedA) // false
Run Code Online (Sandbox Code Playgroud)

但是改变a的任何值之间-128,以127始终打印true:

val a: Int = -128
val boxedA: Int? = a            // Integer@445
val anotherBoxedA: Int? = a     // Integer@445 why?
print(boxedA === anotherBoxedA) // true!
Run Code Online (Sandbox Code Playgroud)

在我看来,如果Int值的范围之外-128,以127(Java字节)科特林创建上分配一个新的对象也使得参考不相等.

Ing*_*gel 8

请参阅Integer.valueOf()适用于装箱int值的Java源代码.javadoc说:

此方法将始终缓存-128到127范围内的值

因此,如果具有相同的数值,则该范围内的盒装整数始终是相同的对象.

在Kotlin中,你应该比较盒装的整数==与否===.