Самый компактный способ сравнить три объекта для равенства с помощью Java?

Существует два общих и связанных значения таблиц символов здесь.

Первый, в Ваших объектных файлах существует таблица символов. Обычно, компилятор C или C++ компилирует единственный исходный файл в объектный файл с .obj или.o расширением. Это содержит набор исполняемого кода и данных, которые компоновщик может обработать в рабочее приложение или совместно использованную библиотеку. Объектный файл имеет структуру данных, названную таблицей символов в нем, которая отображает различные объекты в объектном файле к именам, которые может понять компоновщик. Если Вы вызываете функцию от своего кода, компилятор не помещает заключительный адрес стандартной программы в объектном файле. Вместо этого это помещает значение заполнителя в код и добавляет примечание, которое говорит компоновщику искать ссылку в различных таблицах символов от всех объектных файлов, которые это обрабатывает, и засуньте заключительное местоположение там.

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

, Если Вы хотите узнать больше, я предлагаю превосходную книгу John Levine "Компоновщики и Загрузчики". текст ссылки

8
задан John Topley 16 November 2009 в 16:29
поделиться

4 ответа

Как сказано в OP A и B никогда не равны нулю, C может быть нулевым, используйте это:

if(A.equals(B) || B.equals(C) || A.equals(C))
   // not unique

и, как уже предлагали другие, вы можете поместить его в метод для повторного использования. Или общий метод, если вам нужно больше повторного использования; -)

Обратите внимание, что в Java функция равно состоит в том, что если его аргумент равен null , он не должен бросать, а возвращать ложь.

11
ответ дан 5 December 2019 в 07:11
поделиться

Так как я никогда не запускаю Java-проект без использования Apache commons-lang , попробуйте ObjectUtils.equals (это нулевое значение):

if (ObjectUtils.equals(a, b) || ObjectUtils.equals(b, c) || ObjectUtils.equals(a, c)) {
  // error condition
}

Положите эта логика в универсальном методе, и вы добьетесь еще большего.

Хотя бизнес-логика позволяет C иметь значение NULL, в сценариях, подобных этому, часто лучше использовать защитный код и предполагать, что A или B могут иметь значение NULL, поскольку хорошо.

6
ответ дан 5 December 2019 в 07:11
поделиться

Этот метод можно абстрагировать в утилитах. метод вроде:

public boolean allUnique(Object... objs) {
  Set<Object> set = new HashSet<Object>();
  for (Object o : objs)
    set.add(o);
  return set.size() == objs.length
}

Метод может не работать для небольших чисел (из-за накладных расходов на создание Set и массива varargs). Однако он растет линейно O (n) , и для больших значений лучше, чем квадратичный рост вложенных операторов if .

4
ответ дан 5 December 2019 в 07:11
поделиться
boolean areDistinct(Object a, Object b, Object c) {
    return (!a.equals(b) &&
            (c == null || (!c.equals(a) && !c.equals(b))));
}
4
ответ дан 5 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: