== 与 ===
Java 中的操作符
==
-
如果是基本数据类型,比较的是
值
; -
如果是
引用数据类型,
比较的是地址
。
Kotlin中的操作符 ==
(structural equality) 和 ===
(referential equality) 及 equals
- Kotlin 中的操作符
==
等价于equals
(除了Float和Double的某些情况)
val negZero = -0.0f val posZero = 0.0f println(negZero == posZero) //true println(negZero.equals(posZero)) //false println(negZero === posZero) //true
-
如果是基本数据类型,
===
等价于==
-
如果是
引用数据类型,=== 比较的是地址,即是否指向同一个对象;== 用于比较对象的结构是否相等(对象的结构就是属性和方法),注意只有是data class的情况下,对于normal class不同对象的结构会判定为不同
class Employee (val name: String) val emp1 = Employee(“Suneet”) val emp2 = Employee(“Suneet”) println(emp1 == emp2) //false println(emp1.equals(emp2)) //false println(emp1 === emp2) //false println(emp1.name == emp2.name) //true println(emp1.name.equals(emp2.name)) //true println(emp1.name === emp2.name) //true
data class Employee (val name: String) val emp1 = Employee("Suneet") val emp2 = Employee("Suneet") println(emp1 == emp2) //true println(emp1.equals(emp2)) //true println(emp1 === emp2) //false println(emp1.name == emp2.name) //true println(emp1.name.equals(emp2.name)) //true println(emp1.name === emp2.name) //true
Javascript的操作符 ==
和 ===
(strict equality operator)
- == 先检查两个操作数的数据类型,如果相同,就进行 === 的比较,如果不同,则进行一次类型转换,转为相同类型后再进行比较。(比如一个是字符串,一个是数值,那么把字符串转为数值后再进行比;又比如一个操作数是null,一个是操作数是undefined,就相等)
- ===进行比较时,如果类型不同,直接就是false