我知道调用equals方法比使用==运算符(参见this question)更好。如果两个字符串都为空,或者如果它们代表相同的字符串,我希望两个字符串进行相等的比较。不幸的是,如果字符串为null,则equals方法将抛出NPE。我的代码当前是:
boolean equals(String s1, String s2) {
if (s1 == null && s2 == null) {
return true;
}
if (s1 == null || s2 == null) {
return false;
}
return s1.equals(s2);
}这是不优雅的。执行此测试的正确方法是什么?
发布于 2015-05-06 23:47:29
如果使用Java 7+,则使用Objects.equals();其文档明确规定:
...如果两个参数都为空,则返回true;如果只有一个参数为空,则返回false。否则,通过使用第一个参数的equals方法来确定相等。
这就是你想要的。
如果不这样做,您的方法可以重写为:
return s1 == null ? s2 == null : s1.equals(s2);这之所以有效,是因为.equals()约定保证对于任何对象o,o.equals(null)始终为false。
发布于 2015-05-06 23:47:11
来自Objects.equals()
return (a == b) || (a != null && a.equals(b));非常简单,自我解释和优雅。
发布于 2015-05-06 23:56:04
如果您不能使用解决方案,但是在7+中有Guava或Commons Lang,那么您可以使用以下方法:
芭乐
import com.google.common.base.Objects;
Objects.equal(s1, s2);通用语言
import org.apache.commons.lang3.builder.EqualsBuilder;
new EqualsBuilder().append(s1, s2).isEquals();或
import org.apache.commons.lang3.StringUtils;
StringUtils.equals(s1, s2);https://stackoverflow.com/questions/30081520
复制相似问题