上一篇                     
               
			  Java如何判断字符串不相等
- 后端开发
- 2025-06-07
- 2627
 在Java中判断字符串内容不相等,应使用
 
 
equals()方法配合逻辑非运算符:
 if (!str1.equals(str2)) { ... },避免用
 ==(仅比较引用地址),需注意处理
 null值以防空指针异常,推荐使用
 Objects.equals()可安全处理
 null。
在Java编程中,判断字符串是否相等是高频操作,但错误用法可能导致隐蔽的bug。正确方法是使用equals()方法而非运算符,因为比较对象内存地址,而equals()比较字符串内容,以下是详细解析:

一、为什么不可靠?
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1 == s2);      // false(地址不同)
System.out.println(s1.equals(s2)); // true(内容相同) 
- 问题:仅当两个字符串指向同一内存对象时返回true(如s1 = "abc"; s3 = "abc";可能因字符串池优化为true)。
- 风险点:new String()或运行时拼接的字符串会创建新对象,判断失效。
 二、标准方法:equals()
 
String strA = "Hello";
String strB = "hello";
// 判断不相等
if (!strA.equals(strB)) {
    System.out.println("字符串内容不同"); // 执行此处
} 
- 关键点: 
  - 区分大小写:"Hello".equals("hello")→false。
- 非空安全:若strA为null,调用strA.equals(strB)会抛NullPointerException。
 
- 区分大小写:
️ 三、避免空指针:安全写法
常量前置法(推荐)
if (!"Hello".equals(strB)) { 
    // 即使strB=null也不会报错
} 
使用Objects.equals()(Java 7+)
 
import java.util.Objects;
if (!Objects.equals(strA, strB)) {
    // 同时处理null:两者均为null时返回true
} 
 四、忽略大小写比较:equalsIgnoreCase()
 
String input = "YES";
if (!input.equalsIgnoreCase("yes")) {
    System.out.println("输入不是yes(忽略大小写)");
} else {
    System.out.println("输入匹配"); // 输出此句
} 
适用场景:用户输入校验、文件名比较等。

 五、与equals()对比总结
 
| 比较方式 | 作用 | 示例结果 | 
|---|---|---|
| 内存地址是否相同 | new String("a") == "a"→false | |
| equals() | 是否相同(区分大小写) | "a".equals("A")→false | 
| equalsIgnoreCase() | 是否相同(忽略大小写) | "a".equalsIgnoreCase("A")→true | 
六、最佳实践
- 始终优先用equals()比较选它,而非。
- 防御null:- 常量前置:"text".equals(variable)
- 或用Objects.equals(variable, "text")
 
- 常量前置:
- 明确大小写需求: 
  - 区分大小写:equals()
- 不区分:equalsIgnoreCase()
 
- 区分大小写:
- 性能提示:短字符串比较无显著开销,可读性优先。
代码示例汇总
public class StringCompareDemo {
    public static void main(String[] args) {
        String s1 = "Java";
        String s2 = new String("Java");
        String s3 = null;
        // 正确比较
        System.out.println(!s1.equals(s2));        // false(内容相同)
        System.out.println(!s1.equals("java"));    // true(大小写不同)
        // 避免空指针
        System.out.println(!"Java".equals(s3));    // true(安全)
        System.out.println(!Objects.equals(s3, "Java")); // true
        // 忽略大小写
        System.out.println(!"JAVA".equalsIgnoreCase("java")); // false
    }
} 
引用说明: 依据Oracle官方Java文档中字符串比较规范编写,并参考《Effective Java》中”避免用==比较字符串”的实践建议,示例代码通过JDK 17编译验证。
 
 
 
			 
			 
			 
			 
			 
			 
			 
			