这段代码中的变量怎么可能为空呢?
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;
}
}
}
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;
}
}
}