测试代码
1 2 3 4 5 6 7 8
| fun main() { val list1 = mutableListOf<String>() val list2 = mutableListOf<String>() list1.add("sss") list2.add("sss") println(list1 == list2) println(list1 === list2) }
|
测试输出
我们可以点击跳转看到,== 在kotlin中是一个被重载了的操作符合

点击跳转实现 ,等价于调用object的equals 函数

而 === 不能直接跳转。我们通过反编译成字节码再编反译成java,=== 等价于 java 中的==,比较的是地址, ==在kotlin中是Intrinsics.areEqual方法。


https://asmsupport.github.io/doc/0.4/jvmref/ref-if_acmpne.html === 等号中含有IF_ACMPNE知冷暖

方便查看,可以再反编译成java,查看
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public static final void main() { boolean var1 = false; List list1 = (List)(new ArrayList()); boolean var2 = false; List list2 = (List)(new ArrayList()); list1.add("sss"); list2.add("sss"); var2 = Intrinsics.areEqual(list1, list2); boolean var3 = false; System.out.println(var2); var2 = list1 == list2; var3 = false; System.out.println(var2); }
|
一般Intrinsics.areEqual的实现是判断内容相等,=== 判断的是地址相等
总结
在kotlin中 ,== 被重载为equals,判断的是内容相同就相等。=== 判断的是地址相等