【发布时间】:2021-10-17 15:34:15
【问题描述】:
我目前对结构相等的理解是比较类型和内容。
对于引用相等,它比较两个对象的地址。另外,对于var的原始类型,如果内容相同,则打印为true。
根据doc here --> 数字、字符和布尔值可以在运行时表示为原始值——但对用户来说,它们看起来像普通的类。
所以 String 在运行时应该被视为对象。
但是当引用比较两个具有相同内容的字符串时,我得到了正确的结果。
fun main(){
val name1 = "123"
val name2 = "123"
println(name1 == name2) //true, structural equality which is same type and same content (same as equals)
// checks if left and right are same object --> referential equality
println(name1 === name2) //true ????????
// should print false. String is basic type and not primitve
var Arr: IntArray = intArrayOf(1,2,3)
var Arr2: IntArray = intArrayOf(1,2,3)
println(Arr === Arr2) // prints false, arrays are basic type
}
另外,为什么两种类型的 kotlin 中的相等性不区分 val 和 var?它们的核心是两种不同类型的对象。
有人能指出我在哪里出错了吗?我可能在这里遗漏了一些非常明显的东西。
【问题讨论】:
-
这能回答你的问题吗? stackoverflow.com/questions/9698260/…
-
@gpunto 谢谢。它确实回答了我问题的第一部分。我将在答案中添加这个。
-
我真的不明白为什么
val和var应该被认为是不同的。这就像问如果属性/字段和局部变量本质上是不同的东西,为什么允许this.myProperty == localVariable。检查相等性时,数据存储在何处或如何存储都无关紧要。我们正在检查 什么 被存储,我们正在寻找内容。
标签: kotlin string-comparison equality