我想比较两个字符串是否相等,当其中一个或两个都可以为空时。

因此,我不能简单地调用.equals(),因为它可以包含空值。

到目前为止,我尝试过的代码:

boolean compare(String str1, String str2) {
  return ((str1 == str2) || (str1 != null && str1.equals(str2)));
}

检查包括空值在内的所有可能值的最佳方法是什么?


当前回答

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

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

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

其他回答

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

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

从3.5版开始,Apache Commons StringUtils有以下方法:

static int  compare(String str1, String str2)
static int  compare(String str1, String str2, boolean nullIsLess)
static int  compareIgnoreCase(String str1, String str2)
static int  compareIgnoreCase(String str1, String str2, boolean nullIsLess)

它们提供了空安全的字符串比较。

boolean compare(String str1, String str2) {
    if(str1==null || str2==null) {
        //return false; if you assume null not equal to null
        return str1==str2;
    }
    return str1.equals(str2);
}

这是你想要的吗?

boolean compare(String str1, String str2) {
    if (str1 == null || str2 == null)
        return str1 == str2;

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