黑马程序员技术交流社区
标题:
两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句 话对不对
[打印本页]
作者:
Mylan
时间:
2014-8-14 13:13
标题:
两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句 话对不对
两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句
话对不对
为什么?
作者:
justin1258
时间:
2014-8-14 13:15
原则上不可以,相等一定要求有相同的哈希码,反之则不一定
作者:
依然超级赛亚人
时间:
2014-8-14 14:05
看看下面这个API中提供的hashCode的常规协定,这应该能解决你的问题。
hashCode 的常规协定是:
(1)在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
(2)如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
(3)如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。
>>>>ps:我认为根据第二条之叙述,你的说法不对....
作者:
xbz1986
时间:
2014-8-14 14:47
说法不对!
作者:
TanZhiPeng1991
时间:
2014-8-14 15:44
依然超级赛亚人 发表于 2014-8-14 14:05
看看下面这个API中提供的hashCode的常规协定,这应该能解决你的问题。
hashCode 的常规协定是:
谢谢总结了
作者:
┣┫流枫
时间:
2014-8-14 22:09
前来学习一i下啊
作者:
思维
时间:
2014-8-15 09:21
第一:你所说的两个对象的值相同,应该是指覆写了equals,比较两个对象的内容。
第二:两个对象比较,他们的HashCode一般不相同,但是像对于-128~127之间的值,被封装为对象之后,会被缓存起来,在内存中会重用,他们的HashCode应该相等。
作者:
嘿~~
时间:
2014-8-15 09:39
hashCode()和equals()方法都是java.lang.Object类中的方法。所有类都继承了这个类中的方法,所以你可以自定义hashCode()和equals(),也就是你可以自定义两个对象是否相等的标准
作者:
不再上网
时间:
2014-8-15 19:32
==用于比较地址值的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2