测试代码
| 12
 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,查看
| 12
 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,判断的是内容相同就相等。=== 判断的是地址相等