我在凌晨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会在赋值时创建一个新对象确实使引用不相等。
答案 0 :(得分:8)
请参阅Integer.valueOf()
的Java源代码,它对装箱int值是可重用的。 javadoc说:
此方法将始终缓存-128到127
范围内的值
因此,如果它们具有相同的数值,则该范围内的盒装整数始终是同一个对象。
在Kotlin中,您应该将盒装整数与==
进行比较,而不是===
。