Подтвердить что ты не робот

Как сравнить две строки, когда оба могут быть нулевыми?

Мне известно, что лучше использовать метод 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);
}

Это неэлегантно. Каков правильный способ проведения этого теста?

4b9b3361

Ответ 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);