Как сравнить две строки, когда оба могут быть нулевыми?
Мне известно, что лучше использовать метод equals
с помощью оператора ==
(см. этот вопрос). Я хочу, чтобы две строки сравнивались как равные, если они оба являются нулевыми или представляют собой одну и ту же строку. К сожалению, метод 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);
}
Это неэлегантно. Каков правильный способ проведения этого теста?
Ответы
Ответ 1
Если Java 7+, используйте Objects.equals()
; его документация явно указывает, что:
[...], если оба аргумента равны null, возвращается true, и если только один аргумент равен null, возвращается false. В противном случае равенство определяется с помощью метода equals первого аргумента.
что вы хотите.
Если вы этого не сделаете, ваш метод можно переписать на:
return s1 == null ? s2 == null : s1.equals(s2);
Это работает, потому что контракт .equals()
гарантирует, что для любого объекта o
o.equals(null)
всегда false.
Ответ 2
Из Objects.equals()
:
return (a == b) || (a != null && a.equals(b));
Очень просто, самоочевидно и элегантно.
Ответ 3
Если вы не можете использовать решение Java 7+, но у вас есть Guava или Commons Lang в classpath, вы можете использовать следующее:
гуавы
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);