Ответ 1
Обычная идиома такова:
return (str1 == null ? str2 == null : str1.equals(str2));
Мне просто интересно, есть ли лучший способ сделать это. я чувствую, что это может быть неэффективно. Проблема заключается в причине БД, мне нужно сравнить строки, которые иногда могут быть нулевыми или нет.
public static boolean compareStrings(String str1, String str2){
if(str1 == null && str2 == null) return true;
if(str1 != null && str2 != null){
if(str1.equals(str2))
return true;
}
return false;
}
Обычная идиома такова:
return (str1 == null ? str2 == null : str1.equals(str2));
Вы говорите, что они потенциально происходят из базы данных. Если честно, любая неэффективность вокруг нескольких тестов на недействительность совершенно незначителен по сравнению с затратами на запросы к базе данных. Я бы сосредоточился на удобочитаемости.
С этой целью я бы начал использовать Guava и Objects
класс:
boolean equal = Objects.equal(a, b);
Я бы ожидал, что это будет реализовано в соответствии с кодом Теймона, в основном - но приятно иметь его в одном месте.
EDIT: Для Java 7+ вам не нужен Guava. Вы можете просто использовать java.util.Objects.equal(a, b)
.
Если вы открыты для использования apache Commons StringUtils, то они имеют равные значения, которые сравнивают две строки с нулевым уровнем безопасности
Этот код будет только неэффективным, если он вызовет узкое место во время нормального выполнения вашей программы. Единственный способ узнать, так ли это, - запустить вашу программу через профилировщик. Пока вы это сделаете и не увидите, что эта функция вызывает проблемы с производительностью, я бы не стал беспокоиться об этом.