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

为什么比较内容相同的String字符串会得到不同的结果?

Java字符串比较结果差异原因

首先明确两个比较操作的核心区别:

  • == 对于引用类型(包括String),比较的是两个引用指向的内存地址是否相同,本质是判断是否为同一个对象
  • equals() 方法在String类中被重写,专门用于比较两个字符串的实际字符内容是否完全一致,和对象地址无关

再结合JVM的字符串常量池机制解释你的代码结果:

  1. 当你用String s1 = "Hello"、String s2 = "Hello"这种双引号直接赋值的方式声明字符串时,JVM会优先在字符串常量池中查找是否存在值为"Hello"的对象:
    • 首次声明s1时,常量池没有对应对象,会新建后返回引用给s1
    • 声明s2时,常量池已经有"Hello",直接把同一个引用返回给s2
      因此s1和s2指向同一个对象,s1 == s2返回true,同时两者内容完全相同,s1.equals(s2)必然返回true,你给出的运行结果中这行显示为false属于笔误。
  2. 当你用String s3 = new String("Hello")声明字符串时,相当于强制JVM在堆内存中开辟一块新的独立空间存储String对象,不会复用常量池中的已有对象,因此s3的内存地址和s1完全不同,所以s1 == s3返回false,但两者存储的字符内容一致,所以s1.equals(s3)返回true。

最佳实践:如果只需要判断字符串内容是否相同,统一使用equals()方法,不要用==,避免因为对象来源不同出现不符合预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:06:04