Int上的Kotlin引用平等行为,值介于-128到127之间
我正在给自己,直到上午十二点才学习,并获得生产力(希望)kotlin。
以下https://kotlinlang.org/docs/kotlin-docs.pdf我试过第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) // false
但是,将-128
更改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在赋值时创建一个新的对象,使得引用不相等。
查看负责装箱int值的Integer.valueOf()
的Java源代码。 javadoc说:
此方法将始终将值缓存在-128到127范围内
所以在这个范围内的盒装整数总是相同的对象,如果他们有相同的数值。
在Kotlin中,你应该比较装箱整数与==
而不是===
。