在 Java 里,String 要用 equals() 而不是 ==,核心原因是:
==比较的是“引用(内存地址)”,而equals()比较的是“字符串内容”。
== 在 String 中做了什么?String a = new String("abc");
String b = new String("abc");
System.out.println(a == b); // false
a 和 b 是 两个不同的对象== 比较的是:它们是不是同一个对象(内存地址是否相同)falseequals() 在 String 中做了什么?System.out.println(a.equals(b)); // true
String 重写了 Object.equals()"abc".equals("abc") → true== 看起来“能用”?Java 有 字符串常量池(String Pool)
String a = "abc";
String b = "abc";
System.out.println(a == b); // true
原因:
"abc" 在编译期进入常量池a 和 b 指向 同一个常量池对象⚠️ 但这是特殊情况,不能依赖
new String() 和字面量的区别String a = "abc"; // 常量池
String b = new String("abc"); // 堆中新建对象
a == b → falsea.equals(b) → true✅ 比较字符串内容,永远用 equals()
if (str.equals("hello")) { }
✅ 避免空指针,推荐写法
if ("hello".equals(str)) { }
❌ 不要用:
if (str == "hello") { } // 错误用法
String 用
==比的是“是不是同一个对象”,
用equals()比的是“内容是否一样”。
如果你愿意,我也可以讲:
intern() 的作用equals() 和 hashCode() 的关系免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。