Kotlin-引用相等性并不总是有效

时间:2018-12-19 21:10:24

标签: kotlin

根据docs===执行参照相等。

鉴于以下参照相等性比较,这似乎并非在所有情况下都有效:

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"

那么为什么引用相等比较对后一种情况有效,而对前一种无效?

1 个答案:

答案 0 :(得分:2)

===的基本含义是“这些对象是相同类型的,并且它们指向相同的内存地址吗?”

在您的第一个示例中,xy都指向常量A,该常量作为String常量只有一个实例,因此它们返回true。 / p>

从文件中读取时,将对读取的字符串进行分配,因此xy指向不同的内存地址,因此它们是相等的(==返回true),但不完全相同(===返回false)。