Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
值介于-128到127之间的Int上的Kotlin引用相等行为_Kotlin - Fatal编程技术网

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

值介于-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) /

我给自己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) // 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中,您应该将装箱整数与
=
进行比较,而不是与
=
进行比较