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

时间:2016-02-25 07:50:43

标签: kotlin

我在凌晨12点之前给自己学习并在kotlin上获得成功(希望如此)。

关注https://kotlinlang.org/docs/kotlin-docs.pdf我在第17页尝试了这些代码段。如果某个值介于===到{{1}之间,有人可以帮助我理解为什么true会返回-128 }?

以下确实打印127

false

然而,将val a: Int = 10000 val boxedA: Int? = a // Integer@445 val anotherBoxedA: Int? = a // Integer@447 why? print(boxedA === anotherBoxedA) // false 更改为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! 值超出Int-128的边界(Java字节),kotlin会在赋值时创建一个新对象确实使引用不相等。

1 个答案:

答案 0 :(得分:8)

请参阅Integer.valueOf()的Java源代码,它对装箱int值是可重用的。 javadoc说:

  

此方法将始终缓存-128到127

范围内的值

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

在Kotlin中,您应该将盒装整数与==进行比较,而不是===