Идентичность - это не равенство.
==
тестового тождества. equals(Object obj)
метод сравнивает тест равенства (т.е. нам нужно сказать равенство, переопределяя метод) Почему мне нужно переопределить методы equals и hashCode в Java?
blockquote>Сначала мы должны понять использование метода equals.
Для того, чтобы идентифицировать различия между двумя объектами, нам нужно переопределить метод equals.
Например:
Customer customer1=new Customer("peter"); Customer customer2=customer1; customer1.equals(customer2); // returns true by JVM. i.e. both are refering same Object ------------------------------ Customer customer1=new Customer("peter"); Customer customer2=new Customer("peter"); customer1.equals(customer2); //return false by JVM i.e. we have two different peter customers. ------------------------------ Now I have overriden Customer class equals method as follows: @Override public boolean equals(Object obj) { if (this == obj) // it checks references return true; if (obj == null) // checks null return false; if (getClass() != obj.getClass()) // both object are instances of same class or not return false; Customer other = (Customer) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) // it again using bulit in String object equals to identify the difference return false; return true; } Customer customer1=new Customer("peter"); Customer customer2=new Customer("peter"); Insteady identify the Object equality by JVM, we can do it by overring equals method. customer1.equals(customer2); // returns true by our own logic
Теперь метод hashCode может легко понять.
hashCode создает целое число для хранения объекта в структурах данных, таких как HashMap, HashSet.
Предположим, что мы переопределим метод равенства
Customer
, как указано выше,customer1.equals(customer2); // returns true by our own logic
Во время работы с структурой данных, когда мы храним объект в ведрах (ведро - причудливое имя для папки) , Если мы используем встроенную хеш-технику, то для двух других клиентов она генерирует два разных хэш-кода. Таким образом, мы сохраняем один и тот же объект в двух разных местах. Чтобы избежать таких проблем, мы должны переопределить метод hashCode также на основе следующих принципов.
- экземпляры un-equal могут иметь один и тот же хэш-код.
- равные экземпляры должны возвращать одинаковый хэш-код.
Нет. java.io.File может использоваться только для отображения реальных каталогов.
Однако вы можете рассматривать его как java.nio.file.Path.
В целом у вас есть три варианта :