根据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"
那么为什么引用相等比较适用于后一种情况,而不适用于前一种情况?
最佳答案
===
基本上意味着“这些对象是否属于同一类型,它们是否指向相同的内存地址?”
在第一个示例中,x
和 y
都指向一个常量 A
,作为字符串常量,有一个的实例,因此它们返回 true。
当您从文件中读取时,会为读取的字符串进行分配,因此,x
和 y
指向不同的内存地址,因此它们是相等的( ==
返回 true),但不相同(===
返回 false)。
关于Kotlin - 引用相等并不总是有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53859180/