在这段代码中,变量如何为空?

DP_*_*DP_ 11 java findbugs

FindBugs抱怨在此方法中Comparator.compareStrings(String,String)可能不可行的分支上的str1的可能空指针解除引用:

private static int compareStrings(final String str1, final String str2) {
    if ((str1 == null) && (str2 == null)) {
        return COMPARE_ABSENT;
    }
    if ((str1 == null) && (str2 != null)) {
        return COMPARE_DIFFERS;
    }
    if ((str1 != null) && (str2 == null)) {
        return COMPARE_DIFFERS;
    }
    return str1.equals(str2) ? COMPARE_EQUALS : COMPARE_DIFFERS;
}
Run Code Online (Sandbox Code Playgroud)

在Eclipse中,我还在最后一行看到警告(str1可能为null).

在什么情况下可以str1nullreturn str1.equals(str2) ? COMPARE_EQUALS : COMPARE_DIFFERS;(鉴于前两个if块覆盖的情况下,当str1为null)?

Era*_*ran 10

您可以通过重新排列if语句来避免警告:

private static int compareStrings(final String str1, final String str2) {
    if (str1 == null) {
        if (str2 == null)) {
            return COMPARE_ABSENT;
        } else {
            return COMPARE_DIFFERS;
        }
    } else {
        if (str2 == null)) {
            return COMPARE_DIFFERS;
        } else {
            return str1.equals(str2) ? COMPARE_EQUALS : COMPARE_DIFFERS;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @ Harry.Chen但它更具可读性吗?我想这是一个意见问题:) (2认同)