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()将读取什么,因为它是缓存的。