这段代码中的变量怎么可能为空呢?

How can a variable be null in this piece of code?

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

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;
}

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

在什么情况下str1可以是null in return str1.equals(str2) ? COMPARE_EQUALS : COMPARE_DIFFERS;(前提是前两个if块涵盖了str1为null时的情况)?

在你调用str1.equals(str2)的地方,str1不能null。您应该在该位置禁止显示此警告。

您可以通过重新排列 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;
        }
    }
}