Kotlin-参考等式不';我不总是工作

Kotlin-参考等式不';我不总是工作,kotlin,Kotlin,根据==执行引用相等 考虑到以下引用等式比较,这似乎并不适用于所有情况: val x = "A" val y = "A" println(x === y) // "true" println("A" === "A") // "true" 我希望这两个案例都返回false 然而,本例返回了预期的false: val x = readLine()!! // "A" val y = readLine()!! // "A" println(x === y) // "false" 那么,为什么引用

根据==执行引用相等

考虑到以下引用等式比较,这似乎并不适用于所有情况:

val x = "A"
val y = "A"

println(x === y) // "true"
println("A" === "A") // "true"
我希望这两个案例都返回false

然而,本例返回了预期的false:

val x = readLine()!! // "A"
val y = readLine()!! // "A"

println(x === y) // "false"

那么,为什么引用相等比较适用于后一种情况,而不适用于前一种情况呢?

这个
==
的基本意思是“这些对象是相同类型的,它们指向相同的内存地址吗?”

在第一个示例中,
x
y
都指向一个常量
a
,该常量作为字符串常量,只有一个实例,因此返回true


从文件中读取时,会为读取的字符串进行分配,因此,
x
y
指向不同的内存地址,因此它们相等(
=
返回true),但不相同(
==
返回false)。

=
基本上是指“这些对象是同一类型的吗?它们指向同一内存地址吗?”

在第一个示例中,
x
y
都指向一个常量
a
,该常量作为字符串常量,只有一个实例,因此返回true


从文件读取时,会为读取的字符串进行分配,因此,
x
y
指向不同的内存地址,因此它们相等(
=
返回true),但不相同(
==
返回false).

因为可能会将两个相等的字符串文字编译到同一个对象。要添加到链接,这里的区别在于编译时不知道readLine()是什么将读取,因为它是缓存的。因为可能会将两个相等的字符串文字编译到同一个对象。要添加到链接,这里的区别在于,在编译时不知道readLine()将读取什么,因为它是缓存的。