Лучший способ сравнить строки, которые могут быть нулевыми

Мне просто интересно, есть ли лучший способ сделать это. я чувствую, что это может быть неэффективно. Проблема заключается в причине БД, мне нужно сравнить строки, которые иногда могут быть нулевыми или нет.

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;
}

Ответ 1

Обычная идиома такова:

return (str1 == null ? str2 == null : str1.equals(str2));

Ответ 2

Вы говорите, что они потенциально происходят из базы данных. Если честно, любая неэффективность вокруг нескольких тестов на недействительность совершенно незначителен по сравнению с затратами на запросы к базе данных. Я бы сосредоточился на удобочитаемости.

С этой целью я бы начал использовать Guava и Objects класс:

boolean equal = Objects.equal(a, b);

Я бы ожидал, что это будет реализовано в соответствии с кодом Теймона, в основном - но приятно иметь его в одном месте.

EDIT: Для Java 7+ вам не нужен Guava. Вы можете просто использовать java.util.Objects.equal(a, b).

Ответ 3

Если вы открыты для использования apache Commons StringUtils, то они имеют равные значения, которые сравнивают две строки с нулевым уровнем безопасности

Ответ 4

Этот код будет только неэффективным, если он вызовет узкое место во время нормального выполнения вашей программы. Единственный способ узнать, так ли это, - запустить вашу программу через профилировщик. Пока вы это сделаете и не увидите, что эта функция вызывает проблемы с производительностью, я бы не стал беспокоиться об этом.