对hashcodeequals的理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对hashcodeequals的理解相关的知识,希望对你有一定的参考价值。

1、首先hashcode和equals都是java每个对象都存在的方法,因为他们两是Object的方法。

2、hashcode方法默认返回的是该对象内存地址的哈希码,然而你会发现,Object类中没有此方法的实现,是一个native方法,由c++实现,java只负责调用。像String等都对hashcode实现了重写,同样也对equals进行了重写,已达到自己的需求。

3、equals方法默认返回的是 this==o,也就是判断两个对象的地址是否相同,如果相同则返回true,否则false;这样你就会发现当你比较String时,equals和==的结果不同的原因,因为String重写了equals,地址相同或者对象中的内容相同就会返回true,假如没有重写,那么equals和==就没有区别。一般其他的一些类都有重写。

4、一般当你重写了equals方法时需要重写hashcode方法,因为当重写后对象相等后,需要满足hashcode值也相等。不然当你将数据存储到hashset中时就会出现问题,hashset中的值是不能重复的,就是根据对象的hashcode的值判断的,如果只重写equals 不重写hashcode可能造成相同的对象有不同的hashcode值(不重写就是比较地址的哈希码,然而改变了就需要根据需求改变),就可能重复存储。

以上是关于对hashcodeequals的理解的主要内容,如果未能解决你的问题,请参考以下文章

Java基础知识点简记

链地址法实现HashMap

ListMapSet的区别与联系

hashmap中equals() 和hashcode(),请教

重写了equals方法为何需要重写 hashCode

第一章 关于String的一些