根据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"
那么为什么引用相等比较对后一种情况有效,而对前一种无效?
答案 0 :(得分:2)
===
的基本含义是“这些对象是相同类型的,并且它们指向相同的内存地址吗?”
在您的第一个示例中,x
和y
都指向常量A
,该常量作为String常量只有一个实例,因此它们返回true。 / p>
从文件中读取时,将对读取的字符串进行分配,因此x
和y
指向不同的内存地址,因此它们是相等的(==
返回true),但不完全相同(===
返回false)。