Как сравнить два объекта класса?
Мне нужно сравнить, написать компаратор. По времени уже сравнил, как сравнить по другим полям? Все остальные поля — это enum.
Отслеживать
51.2k 86 86 золотых знаков 266 266 серебряных знаков 505 505 бронзовых знаков
задан 31 окт 2012 в 14:15
2,033 2 2 золотых знака 24 24 серебряных знака 45 45 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Согласно документации при сравнении enum вполне применим оператор как == так и метод equals()
Because there is only one instance of each enum constant, it is permissible to use the == operator in place of the equals method when comparing two object references if it is known that at least one of them refers to an enum constant. (The equals method in Enum is a final method that merely invokes super.equals on its argument and returns the result, thus performing an identity comparison.)
Отслеживать
ответ дан 31 окт 2012 в 14:22
81.1k 7 7 золотых знаков 72 72 серебряных знака 153 153 бронзовых знака
И еще такой вопрос — мне нужно отсортировать ArrayList
31 окт 2012 в 14:44
ну так вот и определи все условия для больше, меньше и равны
31 окт 2012 в 14:49
Если вы имплементируете Comparable<> , то можете написать только 1 compareTo() , т.е. сортировать по одному полю. Для сортировки по любому другому полю вы должны использовать версию сортировки с компаратором.
Соответственно, для каждого желаемого поля создавать свой компаратор ( Comparator ) и скармливать его методу sort() . Все методы сравнения так и названы ( compare() или compareTo ), потому что сравнивают, т.е. отвечают на вопрос «кто больше или меньше или равны», поэтому надо прописывать условия для всех случаев.
Не путайте с equals() , который проверяет условия, при которых объекты равны, но не отвечает на вопрос кто больше или меньше.
Отслеживать
51.6k 199 199 золотых знаков 59 59 серебряных знаков 242 242 бронзовых знака
ответ дан 5 июл 2017 в 12:31
user224616 user224616
Хоть по всем полям сравнивать в методе compareTo() .
5 авг 2018 в 15:10
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Сравните два объекта в Java
В этом посте мы обсудим, как сравнить два объекта в Java.
Вы никогда не должны использовать == оператор сравнения двух объектов, так как == Оператор выполняет сравнение ссылок и просто проверяет, ссылаются ли два объекта на один и тот же экземпляр или нет. Рекомендуемый вариант сравнения двух объектов — использование equals() метод. Однако, просто позвонив в equals() метод не будет работать должным образом, как показано ниже:
String company ;
String model ;
int warranty ;
public TV ( String company , String model , int warranty ) <
this . company = company ;
this . model = model ;
this . warranty = warranty ;
public class Main <
public static void main ( String [ ] args ) <
TV tv1 = new TV ( "Vu" , "Vu Premium 4K TV" , 2 ) ;
TV tv2 = new TV ( "Vu" , "Vu Premium 4K TV" , 2 ) ;
System . out . println ( tv1 . equals ( tv2 ) ) ; // false
Вышеупомянутая программа вызовет equals() метод Object класс, который ведет себя аналогично == оператор, поскольку он не переопределяется классом. Поэтому каждый класс должен переопределять equals (а также hashCode ) метод Object class и укажите отношение эквивалентности для объектов, чтобы оно оценивало сравнение значений в объекте независимо от того, ссылаются ли два объекта на один и тот же экземпляр или нет. Видеть эта почта Больше подробностей.
Вот простая программа, которая демонстрирует работу equals() метод.
Как сравнить объекты в java
Для сравнения объектов в Java используется метод equals() . Метод equals() сравнивает содержимое двух объектов на равенство.
По умолчанию метод equals() сравнивает два объекта на идентичность, то есть проверяет, указывают ли они на один и тот же объект в памяти. Однако, часто требуется сравнить объекты по содержимому, а не по ссылке на объект.
Чтобы сравнить объекты по содержимому, необходимо переопределить метод equals() в классе объекта. Для этого нужно реализовать логику сравнения внутри метода, которая определяет, что два объекта равны друг другу.
Например, для класса Person , метод equals() может быть реализован следующим образом:
public class Person private String name; private int age; // конструктор и методы класса @Override public boolean equals(Object obj) if (obj == this) // проверка на идентичность return true; > if (!(obj instanceof Person)) // проверка типа объекта return false; > Person other = (Person) obj; // приведение объекта к типу Person return this.name.equals(other.name) && this.age == other.age; // сравнение содержимого > >
- в данном примере метод equals() сначала проверяет идентичность объектов и тип объекта,
- затем сравнивает содержимое объектов — поля name и age ,
- если оба поля равны у двух объектов, то метод возвращает true , иначе — false . *** Для сравнения объектов также можно использовать оператор == Он проверяет идентичность объектов, то есть указывают ли они на один и тот же объект в памяти. Однако, если объекты имеют разные ссылки на память, но содержат одинаковое содержимое, оператор == вернет false , в то время как метод equals() может вернуть true , если переопределен правильно.
3.1. Java примеры – Сравнить две строки
В следующем примере сравниваются две строки, с помощью методов compareTo(String), compareToIgnoreCase(String) и compareTo(object String) строкового класса (String Class), которые возвращают ASCII разность первых нечетных символов сравниваемых строк.
public class Compare < public static void main(String args[])< String firstStr = "Привет Мир!"; String secondStr = "привет мир!"; Object objStr = firstStr; System.out.println(firstStr.compareTo(secondStr)); System.out.println(firstStr.compareToIgnoreCase(secondStr)); System.out.println(firstStr.compareTo(objStr.toString())); >>
Результат
Получим следующий результат:
-32 0 0
Сравнение строк с помощью equals()
Метод equals() – сравнивает строку с указанным объектом. Результат является истинным тогда и только тогда, когда аргумент не является нулевым и является строковым объектом, который представляет ту же последовательность символов, что и этот объект.
public class Compare < public static void main(String []args)< String str1 = "proglang"; String str2 = "proglang"; String str3 = new String ("Prog Lang"); System.out.println(str1.equals(str2)); System.out.println(str2.equals(str3)); >>
Получим следующий результат:
true false
Сравнение строк с помощью оператора ==
public class Compare < public static void main(String []args)< String str1 = "proglang"; String str2 = "proglang"; String str3 = new String ("Prog Lang"); System.out.println(str1 == str2); System.out.println(str2 == str3); >>
Получим следующий результат:
true false
Оглавление
- 1. Java примеры – Использование кода на практике
- 2. Java примеры – Окружающая среда
- 2.1. Java примеры – Скомпилировать файл
- 2.2. Java примеры – Установить путь к нескольким классам
- 2.3. Java примеры – Отладка java-файла
- 2.4. Java примеры – Установить путь к классу
- 2.5. Java примеры – Просмотреть текущий путь класса
- 2.6. Java примеры – Установить назначение файла класса
- 2.7. Java примеры – Запустить скомпилированный java-файл класса
- 2.8. Java примеры – Узнать версию Java
- 2.9. Java примеры – Установить путь к классу в .jar-файле или .zip-файле
- 3. Java примеры – Строки
- 3.1. Java примеры – Сравнить две строки
- 3.2. Java примеры – Найти последнее вхождение подстроки внутри подстроки
- 3.3. Java примеры – Удалить нужный символ из строки
- 3.4. Java примеры – Заменить символ в строке
- 3.5. Java примеры – Вывод в обратном порядке
- 3.6. Java примеры – Нахождение символа или слова в строке
- 3.7. Java примеры – Разбиение строки на слова и символы
- 3.8. Java примеры – Преобразование строки в верхний регистр
- 3.9. Java примеры – Найти слово в строке
- 3.10. Java примеры – Сравнить производительность создания строки
- 3.11. Java примеры – Оптимизировать создание строк
- 3.12. Java примеры – Форматирование строк
- 3.13. Java примеры – Конкатенация строк
- 3.14. Java примеры – Определить код Юникода символа в строке
- 3.15. Java примеры – Буферизация строк
- 4. Java примеры – Массивы
- 4.1. Java примеры – Сортировка массива и поиск элемента
- 4.2. Java примеры – Метод сортировки массива, вставить элемент в массив
- 4.3. Java примеры – Размер двумерного массива
- 4.4. Java примеры – Обратный порядок массива, переворачиваем массив
- 4.5. Java примеры – Как выводить массивы и двумерные массивы в консоль
- 4.6. Java примеры – Найти максимальный и минимальный элемент массива
- 4.7. Java примеры – Соединить два массива в один
- 4.8. Java примеры – Как заполнить массив числами
- 4.9. Java примеры – Увеличить массив после инициализации
- 4.10. Java примеры – Сравнение двух массивов
- 4.11. Java примеры – Удаление элемента из массива
- 4.12. Java примеры – Удаление массива из другого массива
- 4.13. Java примеры – Одинаковые элементы массивов
- 4.14. Java примеры – Поиск в массиве
- 4.15. Java примеры – Равенство двух массивов
- 4.16. Java примеры – Сравнить массивы
- 5. Java примеры – Дата и время
- 5.1. Java примеры – Форматирование времени в формате AM-PM
- 5.2. Java примеры – Получение названия и номера текущего месяца
- 5.3. Java примеры – Получить текущее время в часах и минутах
- 5.4. Java примеры – Вывести текущее время и дату
- 5.5. Java примеры – Вывести текущее время в 24-часовом формате
- 5.6. Java примеры – Получить текущий месяц
- 5.7. Java примеры – Получить текущие секунды
- 5.8. Java примеры – Получить короткое название месяца
- 5.9. Java примеры – Получить день недели
- 5.10. Java примеры – Добавление времени к дате
- 5.11. Java примеры – Отображение времени в формате другой страны
- 5.12. Java примеры – Отображение времени на разных языках
- 5.13. Java примеры – Прокрутить часы и месяцы
- 5.14. Java примеры – Получить номер недели и месяц в году
- 5.15. Java примеры – Форматы текущей даты
- 6. Java примеры – Методы
- 6.1. Java примеры – Перезагрузка методов
- 6.2. Java примеры – Вывод массива с использованием метода
- 6.3. Java примеры – Решение Ханойской башни
- 6.4. Java примеры – Последовательность чисел Фибоначчи
- 6.5. Java примеры – Вычисление факториала числа
- 6.6. Java примеры – Переопределение метода
- 6.7. Java примеры – Вывод массива с использованием метода
- 6.8. Java примеры – Использование оператора break
- 6.9. Java примеры – Использование оператора continue
- 6.10. Java примеры – Использование метки в методе
- 6.11. Java примеры – Использование операторов enum и switch
- 6.12. Java примеры – Использование конструктора enum