联系hashgameCONTACT hashgame
地址:广东省广州市
手机:13988889999
电话:020-88889999
邮箱:admin@qq.com
查看更多
Rhashgamehashgame
你的位置: 首页 > hashgame

HASH GAME - Online Skill Game ET 300精品]hashCode() 和equals() 区别和作用

发布时间:2025-08-10 14:15:53  点击量:

  HASH GAME - Online Skill Game GET 300

HASH GAME - Online Skill Game GET 300精品]hashCode() 和equals() 区别和作用

  HashSet 和 HashMap 一直都是 JDK 中最常用的两个类, HashSet 要求不能存储相同的对象, HashMap 要求不能存储相同的键。 那么 Java 运行时环境是如何判断 HashSet 中相同对象、 HashMap 中相同键的呢? 当存储了“相同的东西”之后 Java 运行时环境又将如何来维护呢? 在研究这个问题之前, 首先说明一下 JDK 对 equals(Object obj)和 hashcode()这两个方法的定义和规范: 在 Java 中任何一个对象都具备 equals(Object obj)和 hashcode()这两个方法, 因为他们是在 Object 类中定义的。 equals(Object obj)方法用来判断两个对象是否“相同”, 如果“相同”则返回 true, 否则返回false。 hashcode()方法返回一个 int 数, 在 Object 类中的默认实现是“将该对象的内部地址转换成一个整数返回”。 接下来有两个个关于这两个方法的重要规范(我只是抽取了最重要的两个,其实不止两个): 规范 1: 若重写 equals(Object obj)方法, 有必要重写 hashcode()方法, 确保通过equals(Object obj)方法判断结果为 true 的两个对象具备相等的 hashcode()返回值。 说得简单点就是: “如果两个对象相同, 那么他们的 hashcode 应该 相等”。 不过请注意: 这个只是规范, 如果你非要写一个类让 equals(Object obj)返回 true 而 hashcode()返回两个不相等的值, 编译和运行都是不会报错的。 不过这样违反了 Java 规范, 程序也就埋下了 BUG。 规范 2: 如果 equals(Object obj)返回 false, 即两个对象“不相同”, 并不要求对这两个对象调用 hashcode()方法得到两个不相同的数。 说的简单点就是: “如果两个对象不相同, 他们的 hashcode 可能相同”。 根据这两个规范, 可以得到如下推论: 1 、 如果两个对象 equals, Java 运行时环境会认为他们的 hashcode 一定相等。 2、 如果两个对象不 equals, 他们的 hashcode 有可能相等。 3、 如果两个对象 hashcode 相等, 他们不一定 equals。 4、 如果两个对象 hashcode 不相等, 他们一定不 equals。 这样我们就可以推断 Java 运行时环境是怎样判断 HashSet 和 HastMap 中的两个对象相同或不同了。 我的推断是: 先判断 hashcode 是否相等, 再判断是否 equals。 测试程序如下: 首先我们定义一个类, 重写 hashCode()和 equals(Object obj)方法 Java 代码 [ j ava] view plaincopy

【返回列表页】

顶部

地址:广东省广州市  电话:020-88889999 手机:13988889999
Copyright © 2018-2025 哈希游戏(hash game)官方网站 版权所有 非商用版本 ICP备案编: