==
演算子を使用するよりもequals
メソッドを呼び出す方がよいことを認識しています( この質問 を参照)。 2つの文字列が両方ともnullである場合、または同じ文字列を表す場合、2つの文字列を等しいものとして比較する必要があります。残念ながら、文字列がequals
の場合、NPE
メソッドはnull
をスローします。私のコードは現在:
boolean equals(String s1, String s2) {
if (s1 == null && s2 == null) {
return true;
}
if (s1 == null || s2 == null) {
return false;
}
return s1.equals(s2);
}
これは洗練されていません。このテストを実行する正しい方法は何ですか?
Java 7+の場合、 Objects.equals()
を使用します。そのドキュメントでは、次のことが明示的に指定されています。
[...]両方の引数がnullの場合、trueが返され、正確に一方の引数がnullの場合、falseが返されます。それ以外の場合、等しいかどうかは、最初の引数のequalsメソッドを使用して決定されます。
あなたが望むものです。
そうしない場合、メソッドを次のように書き換えることができます。
_return s1 == null ? s2 == null : s1.equals(s2);
_
これは、.equals()
コントラクトがすべてのオブジェクトo
、o.equals(null)
が常にfalseであることを保証するために機能します。
Java 7+ソリューションを使用できないが、クラスパスにGuavaまたはCommons Langがある場合、次を使用できます。
グアバ:
import com.google.common.base.Objects;
Objects.equal(s1, s2);
コモンズラング:
import org.Apache.commons.lang3.builder.EqualsBuilder;
new EqualsBuilder().append(s1, s2).isEquals();
または
import org.Apache.commons.lang3.StringUtils;
StringUtils.equals(s1, s2);