📜  空对象引用上的布尔 java.lang.String.equals(java.lang.Object)' - Java (1)

📅  最后修改于: 2023-12-03 15:11:27.669000             🧑  作者: Mango

空对象引用上的布尔 java.lang.String.equals(java.lang.Object)

Java中的字符串比较,往往使用String.equals()方法。此方法的作用是比较调用该方法的字符串对象与传入的参数字符串对象是否相同,返回相应的布尔值。但是,当传递的参数为null时,会导致空对象引用异常。

为了解决这个问题,Java在String类中实现了一个重载方法String.equals(Object obj),即接受任何类型的对象作为参数。为了在比较字符串时避免空对象引用异常,通常建议用传统的字符串比较方法替换String.equals()方法。

Java提供了三种替代方案:

  1. 使用“”.equals(String s)替代s.equals(“”),其中s可能为空,使用长度为0的字符串来避免空对象异常;

  2. 使用StringUtils.equals(String s1, String s2)方法,其中s1和s2可能为空,该类来自于commons.lang.StringUtils库;

  3. 使用Objects.equals(Object a, Object b)方法,该方法可用于比较任意对象,但当a和b都为空时返回true。

示例代码:

public class Example {
    public static void main(String[] args) {
        String str = null;
        String emptyStr = "";
        String nonEmptyStr = "abc";

        // 传递null会抛出空对象引用异常
        System.out.println(str.equals(emptyStr)); // throws NullPointerException

        // 使用"".equals()解决空指针异常
        System.out.println("".equals(str));  // false
        System.out.println("".equals(emptyStr)); // true
        System.out.println("".equals(nonEmptyStr)); // false

        // 使用StringUtils.equals()解决空指针异常
        System.out.println(StringUtils.equals(null, null)); // true
        System.out.println(StringUtils.equals(null, "")); // false
        System.out.println(StringUtils.equals("", null)); // false
        System.out.println(StringUtils.equals("", "")); // true
        System.out.println(StringUtils.equals("abc", "ABC"));// false
        System.out.println(StringUtils.equalsIgnoreCase("abc", "ABC"));// true

        // 使用Objects.equals()解决空指针异常
        System.out.println(Objects.equals(null, null)); // true
        System.out.println(Objects.equals(null, "")); // false
        System.out.println(Objects.equals("", null)); // false
        System.out.println(Objects.equals("", "")); // true
        System.out.println(Objects.equals("abc", "ABC"));// false
    }
}