You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中‘==’与‘===’的区别是什么?示例解析需求

嘿,我来给你把Kotlin里==和===的区别讲明白,你举的例子之所以两个判断都返回true,是因为字符串常量池的小机制在起作用,咱们一步步拆解:

Kotlin中==与===的核心差异
  • ==:值相等判断
    这玩意儿本质上是调用对象的equals()方法(针对非空对象),核心是比较两个对象的内容/值是否一致。Kotlin里所有类都默认继承自Any类,Any的equals()默认是判断引用相等,但像String、Int这类标准库类都重写了equals(),所以对字符串来说,==就是在检查两个字符串的字符序列是不是完全一模一样。

  • ===:引用相等判断
    这个是直接比较两个对象的内存地址,说白了就是判断两个变量是不是指向堆内存里的同一个对象实例。只有当两个变量指向同一个对象时,===才会返回true。

为什么你的例子里===也返回true?

你写的这段代码:

val str1 = "Hello, World!"
val str2 = "Hello," + " World!"
println(str1 == str2)//print true
println(str1 === str2)//also print true

这是因为Java/Kotlin的字符串常量池机制:在编译阶段,编译器会把字符串常量的拼接操作优化成完整的常量字符串,所以"Hello," + " World!"编译后其实就是"Hello, World!"。这个字符串会被放进JVM的字符串常量池里,当你创建str1和str2时,它们都会直接指向常量池里的同一个字符串对象,所以引用是相等的,===自然就返回true了。

换个场景就能看出差异

要是换成运行时动态生成字符串的情况,结果就不一样了:

val str1 = "Hello, World!"
val str2 = StringBuilder("Hello,").append(" World!").toString()
println(str1 == str2) // 依然返回true,因为两个字符串的内容完全一致
println(str1 === str2) // 这里会返回false,因为str2是运行时生成的新字符串对象,不在常量池里,和str1不是同一个实例

一句话总结

  • 想判断两个对象内容是否相同,用==
  • 想判断两个变量是否指向同一个对象实例,用===

内容的提问来源于stack exchange,提问作者Jatin Bansal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:41:58