companion object DiffCallback : DiffUtil.ItemCallback<MarsProperty>() {
override fun areItemsTheSame(oldItem: MarsProperty, newItem: MarsProperty): Boolean {
return oldItem === newItem
}
===
是什么意思?
答案 0 :(得分:1)
Kotlin中的===
运算符是引用相等运算符。含义:这些引用是否指向内存中的同一位置(它们在物理上是同一对象)。
与==
(结构相等运算符)相反。含义:这些对象是否具有相同的结构(它们在逻辑上是相同的对象)。
请注意,如果两个对象在引用上相等(指向内存中的相同位置),则它们在结构上是相同的(相同的构成)。
答案 1 :(得分:1)
如文档所述:
在科特林,平等有两种类型:
-结构相等(检查equals())。
-参照平等(二 引用指向同一对象);
引用平等运算符fixture.debugElement.query(By.css('form')).triggerEventHandler('ngSubmit', null);
如documentation所说,检查两个变量是否指向内存中的同一对象。
引用相等性由===操作检查(并且取反) 对应的!==)。当且仅当a和b时a === b的计算结果为true 指向同一个对象。对于表示为 运行时的基本类型(例如Int),===等式检查 等价于==支票。
另一方面,该类的===
方法的结构相等性检查。
因此,请考虑以下代码:
equals()
结构相等运算符val one = Integer(1)
val anotherOne = Integer(1)
println(one == anotherOne) //true
println(one === anotherOne) //false
返回true,因为Integer内部有一个equals方法检查其实际值,而引用相等运算符==
返回false,因为它们的引用不同。
考虑另一个示例:
===
在这种情况下,两个运算符都返回false,因为类class Person(val name: String)
val donald = Person(“donald”)
val anotherDonald = Person(“donald”)
println(donald == anotherDonald) //false
println(donald === anotherDonald) //false
没有equals方法并且不检查其实际值。但是如果您覆盖equals方法或将Person
设置为数据类,则第一个返回true,因为数据类会自动覆盖equals方法。但Person
仍返回false,因为引用不同。