“ ===”在科特林。这是什么意思?

时间:2020-10-04 16:24:42

标签: kotlin

companion object DiffCallback : DiffUtil.ItemCallback<MarsProperty>() {
        override fun areItemsTheSame(oldItem: MarsProperty, newItem: MarsProperty): Boolean {
            return oldItem === newItem
        } 

===是什么意思?

2 个答案:

答案 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,因为引用不同。