在 Java 里,String 要用 equals() 而不是 ==,核心原因是:
== 比较的是“引用(内存地址)”String a = new String("abc");
String b = new String("abc");
System.out.println(a == b); // false
虽然 a 和 b 内容一样,但它们是两个不同的对象,== 比较的是“是不是同一个对象”。
equals() 比较的是“内容”System.out.println(a.equals(b)); // true
String 类重写了 Object.equals(),用来比较字符串的字符内容是否相同。
有时候这样写会返回 true:
String a = "abc";
String b = "abc";
System.out.println(a == b); // true
原因是 字符串常量池(String Pool):
"abc" 时,JVM 会复用同一个对象a 和 b 指向同一个地址但这是优化行为,不是规则,不能依赖。
✅ 比较字符串内容:
if (a.equals(b)) { ... }
✅ 防止空指针(推荐):
if ("abc".equals(a)) { ... }
==看“是不是同一个对象”,equals()看“内容是否一样”
比较 String 内容,永远用equals()
如果你愿意,我也可以讲 String 常量池 / intern() / 为什么 String 不可变。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。