如何比较两个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);