首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当两个字符串都可以为空时,如何比较?

当两个字符串都可以为空时,如何比较?
EN

Stack Overflow用户
提问于 2015-05-06 23:43:32
回答 3查看 11.9K关注 0票数 46

我知道调用equals方法比使用==运算符(参见this question)更好。如果两个字符串都为空,或者如果它们代表相同的字符串,我希望两个字符串进行相等的比较。不幸的是,如果字符串为null,则equals方法将抛出NPE。我的代码当前是:

代码语言:javascript
运行
复制
boolean equals(String s1, String s2) {
  if (s1 == null && s2 == null) {
    return true;
  }
  if (s1 == null || s2 == null) {
    return false;
  }
  return s1.equals(s2);
}

这是不优雅的。执行此测试的正确方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-06 23:47:29

如果使用Java 7+,则使用Objects.equals();其文档明确规定:

...如果两个参数都为空,则返回true;如果只有一个参数为空,则返回false。否则,通过使用第一个参数的equals方法来确定相等。

这就是你想要的。

如果不这样做,您的方法可以重写为:

代码语言:javascript
运行
复制
return s1 == null ? s2 == null : s1.equals(s2);

这之所以有效,是因为.equals()约定保证对于任何对象oo.equals(null)始终为false。

票数 81
EN

Stack Overflow用户

发布于 2015-05-06 23:47:11

来自Objects.equals()

代码语言:javascript
运行
复制
return (a == b) || (a != null && a.equals(b));

非常简单,自我解释和优雅。

票数 44
EN

Stack Overflow用户

发布于 2015-05-06 23:56:04

如果您不能使用解决方案,但是在7+中有Guava或Commons Lang,那么您可以使用以下方法:

芭乐

代码语言:javascript
运行
复制
import com.google.common.base.Objects;

Objects.equal(s1, s2);

通用语言

代码语言:javascript
运行
复制
import org.apache.commons.lang3.builder.EqualsBuilder;

new EqualsBuilder().append(s1, s2).isEquals();

代码语言:javascript
运行
复制
import org.apache.commons.lang3.StringUtils;

StringUtils.equals(s1, s2);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30081520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档