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

我正在给自己,直到上午十二点才学习,并获得生产力(希望)kotlin。

以下https://kotlinlang.org/docs/kotlin-docs.pdf我试过第17页上的这些片段。任何人都可以请帮我理解为什么===如果值介于-128127之间,则返回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 -128127之间的任何值始终显示为true

 val a: Int = -128 val boxedA: Int? = a // Integer@445 val anotherBoxedA: Int? = a // Integer@445 why? print(boxedA === anotherBoxedA) // true! 

在我看来,如果Int值超出了-128127的范围(Java字节),kotlin在赋值时创建一个新的对象,使得引用不相等。

查看负责装箱int值的Integer.valueOf()的Java源代码。 javadoc说:

此方法将始终将值缓存在-128到127范围内

所以在这个范围内的盒装整数总是相同的对象,如果他们有相同的数值。

在Kotlin中,你应该比较=====盒装整数。