2016-02-25 23 views
3

我给自己直到上午12:00学习并获得生产力(希望)在kotlin上。Kotlin的Int参考平等行为,值介于-128到127之间

https://kotlinlang.org/docs/kotlin-docs.pdf我试过第17页,这些片段可能有人请帮助我理解了为什么===回报true如果值是127-128之间?

下确实打印false

val a: Int = 10000 
val boxedA: Int? = a   // [email protected] 
val anotherBoxedA: Int? = a  // [email protected] why? 
print(boxedA === anotherBoxedA) // false 

但是改变a-128之间的任意值127始终打印true

val a: Int = -128 
val boxedA: Int? = a   // [email protected] 
val anotherBoxedA: Int? = a  // [email protected] why? 
print(boxedA === anotherBoxedA) // true! 

在我看来,如果Int值的边界之外-128127(Java字节)kotlin在分配时创建了一个新对象,它使得参考不等于。

回答

7

请参阅负责装箱int值的Integer.valueOf()的Java源代码。 Javadoc中说:

此方法将127个

在这个范围内所以盒装整数始终缓存值在-128总是相同的对象,如果它们具有相同的数值。

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

+0

我明白了。好,然后回到阅读 –