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方法。