Java中String的equals()方法比较字符串内容而非地址,因重写了Object的equals();先==判同引用,再类型检查、长度比较、逐字符比对;==只比内存地址,equals()只比字符序列;equals()内部判空,推荐"str".equals(input)或Objects.equals();区分大小写,忽略时用equalsIgnoreCase()。

Java 中 String 的 equals() 方法确实比较的是字符串内容,而不是内存地址。它之所以能实现“按内容比”,是因为 String 类重写了从 Object 继承的 equals() 方法,不再依赖默认的引用比较逻辑。
内容比对的核心步骤
源码层面,String.equals() 执行以下关键判断:
- 先用
==快速检查是否为同一对象(相同引用),是则直接返回true - 再判断参数是否为
String类型,不是则返回false - 比较两个字符串的长度,不等则返回
false - 逐个字符对比 Unicode 值(从首字符开始,或按优化策略从尾部开始),任一位置不同即返回
false - 全部字符匹配才返回
true
与 == 的本质区别
== 只看两个变量是否指向堆或常量池中的同一个内存地址;而 equals() 完全忽略地址,只关心字符序列是否一致。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
"abc" == new String("abc")→false(地址不同) -
"abc".equals(new String("abc"))→true(内容相同)
null 安全与调用建议
equals() 内部已判空:若传入 null,直接返回 false,不会抛 NullPointerException。但为防调用方为 null,推荐写成:
立即学习“Java免费学习笔记(深入)”;
-
"expected".equals(input)(左侧固定字面量,绝对非空) - 或使用
Objects.equals(str1, str2),自动处理双方可能为null的情况
大小写与替代方案
equals() 区分大小写。如需忽略大小写,应使用 equalsIgnoreCase(),它内部统一转小写再比,比手动调 toLowerCase() 更高效、更符合 locale 规则。

















