大家好,欢迎来到IT知识分享网。
hashCode()和equals()是用于对象比较和哈希计算的重要方法。 作用:
- hashCode(): 返回对象的哈希码,它是一个整数值,用于快速确定对象在哈希表等数据结构中的存储位置。
- equals(): 用于比较两个对象是否相等。默认情况下,equals()方法比较对象的引用是否相同,但可以根据需要重写该方法来自定义对象相等的规则。
区别:
- hashCode()用于快速判断对象是否属于同一组或集合,而equals()用于判断对象是否逻辑上相等。
- hashCode()方法返回一个整数值,而equals()方法返回一个布尔值。
联系:
- 如果两个对象通过equals()方法判断为相等,那么它们的hashCode()应该返回相同的值。这就是说,当两个对象相等时,它们的哈希码也应该相等。
- 如果重写了equals()方法,通常也需要同时重写hashCode()方法,以维护hashCode()与equals()之间的联系。当两个对象相等时,它们的哈希码也应该相等,以确保它们在哈希表中能够正确地进行查找和存储。
当在Java中创建一个自定义类时,通常需要重写equals()和hashCode()方法。下面是一个示例代码来说明它们的作用、区别和联系:
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // Getter and Setter methods public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return age == person.age && Objects.equals(name, person.name); } @Override public int hashCode() { return Objects.hash(name, age); } }
代码中创建了一个Person类,通过提供构造方法,我们可以初始化Person对象的name和age属性,使用getter和setter方法,我们可以获取和设置name和age属性的值。
这样,我们就可以在创建Person对象后,通过getter和setter方法访问和修改对象的属性。
并重写了equals()和hashCode()方法。
equals()方法使用Objects.equals()来比较两个Person对象的name和age属性是否相等。
如果两个对象的name和age都相等,那么它们被认为是逻辑上相等的。
通过调用Objects.equals()来避免了空指针异常。
hashCode()方法使用Objects.hash()来计算对象的哈希码。
hashCode()方法将name和age属性作为参数传递给Objects.hash(),它会根据这些属性的值计算出一个唯一的整数值作为哈希码。
在代码中,可以看到equals()和hashCode()方法是基于name和age属性来判断对象的逻辑相等性。
在使用自定义类的集合时,比如HashSet或HashMap,我们需要正确地重写equals()和hashCode()方法,以便在集合操作中能够正确地识别相等的对象并保持数据的统一。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/98409.html