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

时间:2015-05-04 07:10:38

标签: 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;
}

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

str1null return str1.equals(str2) ? COMPARE_EQUALS : COMPARE_DIFFERS; str1 #define FILE_PATH "/data/sdata.txt" int fptr = open(FILE_PATH, O_CREAT | O_RDWR | O_SYNC | O_APPEND, 0665); if (fptr < 0) { logE("File open failed (%s)", strerror(errno)); } File open failed (Permission denied) 中{{1}}在{{1}}为什么?{/ 1}}

2 个答案:

答案 0 :(得分: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;
        }
    }
}

答案 1 :(得分:2)

在您致电str1时,null 无法成为$item['%'] = array(); 。您应该在该位置禁止此警告。