如何比较两个string,当两者都可以为空?

我知道最好使用==运算符来调用equals方法(请参阅此问题 )。 如果两个string都为null或者它们表示相同的string,我想要两个string进行比较。 不幸的是,如果string为nullequals方法将抛出一个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()合约保证对于任何对象oo.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);