将Java中的两个字符串与可能的空值进行比较

问题

我想在Java中比较两个字符串的相等性,当其中一个或两个都可以是null时,所以我不能简单地调用.equals()。什么是最好的方法?

boolean compare(String str1, String str2) {
    ...
}

编辑:

return ((str1 == str2) || (str1 != null && str1.equals(str2)));

#1 热门回答(163 赞)

从Java 7开始,你可以使用静态方法Objects.equals(Object, Object)对两个对象执行等于检查而不关心它们是null

如果两个对象都是null将返回true,如果一个是null而另一个不是它将返回false。否则它将返回第二个作为参数的第一个对象调用equals的结果。


#2 热门回答(133 赞)

这是Java内部代码使用的(在其他compare方法上):

public static boolean compare(String str1, String str2) {
    return (str1 == null ? str2 == null : str1.equals(str2));
}

#3 热门回答(32 赞)

对于这些情况,最好使用Apache CommonsStringUtils#equals,它已经处理空字符串。代码示例:

public boolean compare(String s1, String s2) {
    return StringUtils.equals(s1, s2);
}

如果你不想添加库,只需复制StringUtils#equals方法的source code并在需要时应用它。