Я хочу сравнить две строки на равенство в Java, когда одна или обе могут быть null
, поэтому я не могу просто позвонить .equals()
. Какой самый лучший способ?
boolean compare(String str1, String str2) {
...
}
Редактировать:
return ((str1 == str2) || (str1 != null && str1.equals(str2)));
Ответы:
Вот что использует внутренний код Java (для других
compare
методов):источник
<0
,==0
или>0
указать , какой из них меньше / терки , чем другойObjects.equals(Object, Object)
как указал Марк Роттвил в своем ответе (пожалуйста, проголосуйте за него)Начиная с Java 7 вы можете использовать статический метод
java.util.Objects.equals(Object, Object)
для выполнения проверки на равенство двух объектов, не заботясь о том, что они естьnull
.Если оба объекта будут,
null
он вернетсяtrue
, если один будет,null
а другой нет, он вернетсяfalse
. В противном случае он вернет результат вызоваequals
первого объекта со вторым в качестве аргумента.источник
Object.equals(Object)
нет проверки типа времени компиляции.Objects.equals(Object, Object)
Работает очень так же , как нормальныйequals
, и повторно умозаключение / проверки по IDE, эти правила эвристики, которые также поддерживаются дляObjects.equals(Object, Object)
(например , IntelliJ IDEA 2016.2 имеет ту же проверку для обоих нормальных равных и один из объектов).Для этих случаев было бы лучше использовать Apache Commons StringUtils # equals , он уже обрабатывает нулевые строки. Пример кода:
Если вы не хотите , чтобы добавить библиотеку, просто скопируйте исходный код этого
StringUtils#equals
метода и применять его , когда вам это нужно.источник
Для тех на Android, кто не может использовать API 19 Objects.equals (str1, str2), есть это:
Это абсолютно безопасно. Ему редко приходится использовать более дорогой метод string.equals (), поскольку идентичные строки на андроиде почти всегда сравнивают true с операндом "==" благодаря Android String Pooling , а проверки длины - это быстрый способ отфильтровать большинство несовпадений.
Исходный код:
источник
Начиная с версии 3.5 Apache Commons StringUtils имеет следующие методы:
Они обеспечивают нулевое безопасное сравнение строк.
источник
Используя Java 8:
источник
Сравните две строки, используя метод equals (-, -) и equalsIgnoreCase (-, -) класса StringUtils Apache Commons.
StringUtils.equals (-, -) :
StringUtils.equalsIgnoreCase (-, -) :
источник
Вы можете использовать
java.util.Objects
следующим образом.источник
это то, что вы хотели?
источник
false
если обе строкиnull
не являются желаемым результатом.источник
источник
Итак, что означает «наилучшее возможное решение»?
Если вы имеете в виду наиболее читаемый, то все возможные решения в значительной степени эквивалентны для опытного программиста на Java. Но самое читаемое ИМО это
Другими словами, скрыть реализацию внутри простого метода, который (в идеале) может быть встроен.
(Вы также можете использовать исходный код для сторонней служебной библиотеки ... если вы уже используете ее в своей кодовой базе.)
Если вы имеете в виду наиболее производительный, то:
null
аргументов,источник