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

2022-08-31 23:48:21

我知道最好使用运算符调用该方法(请参阅此问题)。我希望两个字符串在它们都为 null 或表示相同的字符串时进行比较。不幸的是,如果字符串是,该方法将抛出一个。我的代码目前是:equals==equalsNPEnull

boolean equals(String s1, String s2) {
  if (s1 == null && s2 == null) {
    return true;
  }
  if (s1 == null || s2 == null) {
    return false;
  }
  return s1.equals(s2);
}

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


答案 1

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

[...]如果两个参数都为 null,则返回 true,如果正好一个参数为 null,则返回 false。否则,通过使用第一个参数的 equals 方法确定相等性。

这是你想要的。

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

return s1 == null ? s2 == null : s1.equals(s2);

这是有效的,因为合约保证对于任何对象,总是假的。.equals()oo.equals(null)


答案 2

From Objects.equals()

return (a == b) || (a != null && a.equals(b));

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