值介于-128到127之间的Int上的Kotlin引用相等行为
我给自己12点的时间来学习和提高kotlin的效率(希望如此) 接下来,我在第17页尝试了这些片段。如果值介于值介于-128到127之间的Int上的Kotlin引用相等行为,kotlin,Kotlin,我给自己12点的时间来学习和提高kotlin的效率(希望如此) 接下来,我在第17页尝试了这些片段。如果值介于-128到127之间,谁能帮助我理解为什么==返回true 下面确实打印了false: val a: Int = 10000 val boxedA: Int? = a // Integer@445 val anotherBoxedA: Int? = a // Integer@447 why? print(boxedA === anotherBoxedA) /
-128
到127
之间,谁能帮助我理解为什么==
返回true
下面确实打印了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
到127
(Java字节)的范围,kotlin会在赋值时创建一个新对象,使得引用不相等。请参阅Integer.valueOf()
的Java源代码,它负责装箱Int值。javadoc说:
此方法将始终缓存范围为-128到127的值
因此,如果该范围内的装箱整数具有相同的数值,则它们始终是相同的对象
在Kotlin中,您应该将装箱整数与=
进行比较,而不是与=
进行比较