Java字符串内容比较必须用.equals()而非==,因==只比较引用地址;字面量复用常量池对象而new创建新对象,故"hello"==new String("hello")为false;.equals()逐字符比较且null安全,推荐"abc".equals(str)写法防空指针。

Java中字符串比较不能直接用==判断内容是否相等,必须用.equals()方法——这是最核心的规则。
==不适用于字符串内容比较==比较的是两个引用是否指向**同一个对象**(即内存地址是否相同),而不是内容是否一样。字符串常量池和对象创建方式不同,会导致看似相同的字符串用==返回false。
"abc")会优先从字符串常量池复用已有对象new String("abc")一定在堆中新建对象,即使内容相同,==也返回false
String a = "hello";<br>String b = "hello";<br>String c = new String("hello");<br>System.out.println(a == b); // true(同池)<br>System.out.println(a == c); // false(不同对象).equals()才是安全的内容比较方式String.equals(Object)会逐字符比对内容,且已做空值防护(内部先判null),推荐始终使用它来判断字符串“是否相等”。
"Hello".equals("hello") → false
null安全:调用方为null时返回false(但被比较对象为null会抛NullPointerException,所以建议写成"abc".equals(str)而非str.equals("abc")).equalsIgnoreCase()
根据实际需求,选择更精确的比较方式:
立即学习“Java免费学习笔记(深入)”;
.compareTo()(返回负数/0/正数),适合排序或范围判断.startsWith("prefix")、.endsWith("suffix")
.contains("sub")、.indexOf("sub") != -1
.trim()再.equals(),避免空格干扰当不确定字符串变量是否为null时,把字面量放左边更安全:
"expected".equals(input) —— 永远不会空指针input.equals("expected") —— 若input为null则崩溃Objects.equals(str1, str2)(JDK7+),自动处理两边null
以上就是在Java里如何进行字符串比较_String比较规则解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号