码迷,mamicode.com
首页 > 其他好文 > 详细

对hashcode、equals的理解

时间:2016-09-26 06:23:13      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

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值(不重写就是比较地址的哈希码,然而改变了就需要根据需求改变),就可能重复存储。

对hashcode、equals的理解

标签:

原文地址:http://www.cnblogs.com/greenbeach/p/5907745.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!