Kotlin "E;==&引用;在科特林。这是什么意思? 伴生对象DiffCallback:DiffUtil.ItemCallback(){ 覆盖乐趣项相同(旧项:MarsProperty,新项:MarsProperty):布尔值{ 返回oldItem==newItem }

Kotlin "E;==&引用;在科特林。这是什么意思? 伴生对象DiffCallback:DiffUtil.ItemCallback(){ 覆盖乐趣项相同(旧项:MarsProperty,新项:MarsProperty):布尔值{ 返回oldItem==newItem },kotlin,Kotlin,==是什么意思?Kotlin中的==运算符是引用相等运算符。意思是:这些引用是否指向内存中的相同位置(它们在物理上是相同的对象) 与结构相等运算符==相反。意思是:这些对象是否具有相同的结构(逻辑上是相同的对象) 请注意,如果两个对象在引用上相等(指向内存中的同一位置),则它们在结构上相等(组成相同)。Kotlin中的==运算符是引用相等运算符。意思是:这些引用是否指向内存中的同一位置(它们在物理上是同一对象) 与结构相等运算符==相反。意思是:这些对象是否具有相同的结构(逻辑上是相同的对象)

==
是什么意思?

Kotlin中的
==
运算符是引用相等运算符。意思是:这些引用是否指向内存中的相同位置(它们在物理上是相同的对象)

与结构相等运算符
==
相反。意思是:这些对象是否具有相同的结构(逻辑上是相同的对象)


请注意,如果两个对象在引用上相等(指向内存中的同一位置),则它们在结构上相等(组成相同)。

Kotlin中的
==
运算符是引用相等运算符。意思是:这些引用是否指向内存中的同一位置(它们在物理上是同一对象)

与结构相等运算符
==
相反。意思是:这些对象是否具有相同的结构(逻辑上是相同的对象)


请注意,如果两个对象在引用上相等(指向内存中的同一位置),则它们在结构上相等(组成相同)。

如文档所述:

在Kotlin中有两种类型的相等:
--结构相等(检查equals())。
--参照平等(二) 引用指向同一对象)

所述的引用相等运算符
==
检查两个变量是否指向内存中的同一对象

通过===操作检查引用相等性(并将其取反) 对应项!==)。a===b当且仅当a和b为真时才计算为真 指向同一对象。对于表示为 运行时的基元类型(例如Int),即===相等检查 相当于==检查

另一方面,结构等式检查类的
equals()
方法

例如,考虑下面的代码:

companion object DiffCallback : DiffUtil.ItemCallback<MarsProperty>() {
        override fun areItemsTheSame(oldItem: MarsProperty, newItem: MarsProperty): Boolean {
            return oldItem === newItem
        } 
结构相等运算符
=
返回true,因为Integer中有一个检查其实际值的等于方法,但引用相等运算符
==
返回false,因为它们的引用不同

考虑另一个例子:

val one = Integer(1)
val anotherOne = Integer(1)

println(one == anotherOne)       //true
println(one === anotherOne)      //false


在这种情况下,两个运算符都返回false,因为类
Person
没有equals方法,并且没有检查其实际值。但是如果重写equals方法或将
Person
设为数据类,则第一个运算符返回true,因为数据类会自动重写equals方法。但是
=
仍然返回false,因为引用不同。

如文档所述:

在Kotlin中有两种类型的相等:
--结构相等(检查equals())。
--参照平等(二) 引用指向同一对象)

所述的引用相等运算符
==
检查两个变量是否指向内存中的同一对象

通过===操作检查引用相等性(并将其取反) 对应项!==)。a===b当且仅当a和b为真时才计算为真 指向同一对象。对于表示为 运行时的基元类型(例如Int),即===相等检查 相当于==检查

另一方面,结构等式检查类的
equals()
方法

例如,考虑下面的代码:

companion object DiffCallback : DiffUtil.ItemCallback<MarsProperty>() {
        override fun areItemsTheSame(oldItem: MarsProperty, newItem: MarsProperty): Boolean {
            return oldItem === newItem
        } 
结构相等运算符
=
返回true,因为Integer中有一个检查其实际值的等于方法,但引用相等运算符
==
返回false,因为它们的引用不同

考虑另一个例子:

val one = Integer(1)
val anotherOne = Integer(1)

println(one == anotherOne)       //true
println(one === anotherOne)      //false

在这种情况下,两个运算符都返回false,因为类
Person
没有equals方法,并且没有检查其实际值。但是如果重写equals方法或将
Person
设为数据类,则第一个运算符返回true,因为数据类会自动重写equals方法。但是
=
仍然返回false,因为引用不同