如何比较两个string,当两者都可以为空?
我知道最好使用==
运算符来调用equals
方法(请参阅此问题 )。 如果两个string都为null或者它们表示相同的string,我想要两个string进行比较。 不幸的是,如果string为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); }
这是不雅的。 什么是正确的方法来执行这个testing?
如果Java 7+,使用Objects.equals()
; 其文档明确指出:
[…]如果两个参数都是null,则返回true,如果只有一个参数为null,则返回false。 否则,通过使用第一个参数的equals方法来确定相等性。
这是你想要的。
如果你不这样做,你的方法可以改写成:
return s1 == null ? s2 == null : s1.equals(s2);
这是.equals()
因为.equals()
合约保证对于任何对象o
, o.equals(null)
总是为false。
来自Objects.equals()
:
return (a == b) || (a != null && a.equals(b));
非常简单,自我解释和优雅。
如果您不能使用Java 7+解决scheme,但是在类path中使用了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);