我知道最好使用equals
方法调用==
方法(参见this question)。我希望两个字符串比较相等,如果它们都是null或者它们代表相同的字符串。不幸的是,如果字符串为equals
,NPE
方法将抛出null
。我的代码目前是:
boolean equals(String s1, String s2) {
if (s1 == null && s2 == null) {
return true;
}
if (s1 == null || s2 == null) {
return false;
}
return s1.equals(s2);
}
这是不优雅的。执行此测试的正确方法是什么?
答案 0 :(得分:79)
如果是Java 7+,请使用Objects.equals()
;其文档明确指定:
[...]如果两个参数都为null,则返回true,如果只有一个参数为null,则返回false。否则,通过使用第一个参数的equals方法确定相等性。
这就是你想要的。
如果不这样做,您的方法可以重写为:
return s1 == null ? s2 == null : s1.equals(s2);
这是有效的,因为.equals()
合同保证对于任何对象o
,o.equals(null)
始终为假。
答案 1 :(得分:44)
答案 2 :(得分:4)
如果您不能使用Java 7+解决方案,但在类路径中有Guava或Commons Lang,那么您可以使用以下内容:
<强>番石榴强>:
import com.google.common.base.Objects;
Objects.equal(s1, s2);
Commons Lang :
import org.apache.commons.lang3.builder.EqualsBuilder;
new EqualsBuilder().append(s1, s2).isEquals();
或
import org.apache.commons.lang3.StringUtils;
StringUtils.equals(s1, s2);