《JAVA捡漏系列》之equals方法的正确使用

equals方法在日常编程中使用十分广泛,但是在复杂的编程中很容易发生空指针异常,例如下面代码:

String str = null;
if (str.equals("LMRzero")) {
  ...
} else {
  ..
}

上面的程序运行会抛出空指针异常,这是因为字符串没有进行初始化,不能调用其equals方法,我们需要改成如下方式才能运行:

String str = null;
if ("LMRzero".equals(str)) {
  ...
} else {
  ..
}

上面的代码十分简单,其中一个字符串是显式的定义,我们知道其肯定不为空,但是在复杂的程序中我们很难知道字符串是否已经初始化,例如下面方法所示:

public void method(String str1, String str2){
    if(str1.equals(str2)) {
            ........
    } else {
            .........
    }
}

在这里我们就需要利用到Objects类的equals方法(JDK1.7之后引入)

public void method(String str1, String str2){
    if(Objects.equals(str1, str2)) {
            ........
    } else {
            .........
    }
}

这样就能有效的避免字符串未初始化造成的空指针异常的问题,我们来看一下该方法的源码:

public static boolean equals(Object a, Object b) {
        // 可以避免空指针异常。如果a==null的话此时a.equals(b)就不会得到执行,避免出现空指针异常。
        return (a == b) || (a != null && a.equals(b));
    }

其实该方法本质上就是帮我们进行了一系列判断之后,在调用字符串的equals方法。

 

你可能感兴趣的:(JAVA)