java中值相同,hashcode一定相同吗??

nujiah001 2010-04-06 09:52:49
java中值相同,hashcode一定相同吗??
...全文
671 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dhysf 2010-04-07
  • 打赏
  • 举报
回复
java对象中值相同的话,hashCode不一定相同
davis_rly 2010-04-06
  • 打赏
  • 举报
回复 1
java对象中值相同的话,hashCode不一定相同的,但是也有相同的。比如String类的hashCode如果两个String字面值一样,那么hashCode一定是相同的,因为String类重写了hashCode()方法
对于hashCode()方法的重写规则,最好需要遵守额规则是:如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
希望明白 嘿嘿 刚刚通过了SCJP
focusforce 2010-04-06
  • 打赏
  • 举报
回复
Object
public int hashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。
hashCode 的常规协定是:

在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)


o笨笨猪o 2010-04-06
  • 打赏
  • 举报
回复
原则上equals()返回true,那么hashCode()也要相等。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧