equal(),hashcode(),toString()方法的作用
这三个方法都是java.lang.Object的方法。

equal();判断两对象是否相等
hashcode();为对象在容器中添加一个标识;
toString();把对象转成字符串;

重写equal 的同时为什么必须重写hashcode?

注意:当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

hashCode是编译器为不同对象产生的不同整数,根据equal方法的定义:如果两个对象是相等(equal)的,那么两个对象调用hashCode必须产生相同的整数结果,即:equal为true,hashCode必须为true,equal为false,hashCode也必须为false,所以必须重写hashCode来保证与equal同步。

toString

public String toString()返回该对象的字符串表示。通常,toString方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())
 返回:
该对象的字符串表示形式。
equals

public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
equals方法在非空对象引用上实现相等关系:

?自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
?对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
?传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
?一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals比较中所用的信息没有被修改。
?对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

参数:
obj- 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。
另请参见:
hashCode(), Hashtable
 
 
hashCode

public int hashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable提供的哈希表)的性能。 
hashCode的常规协定是:

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

返回:
此对象的一个哈希码值。
另请参见:
equals(java.lang.Object), Hashtable

最新文章

  1. jvm内存溢出分析
  2. 自动化测试selenium+java 第三章
  3. Android 动态加载 (二) 态加载机制 案例二
  4. SQL Server 2000 ——系统表和系统视图
  5. js sleep效果
  6. 一个功能齐全的IOS音乐播放器应用源码
  7. DDraw绘图
  8. BZOJ 2115: [Wc2011] Xor
  9. flask-sqlalchemy 关系表简单操作
  10. 客户端持久化解决方案:indexedDB
  11. IE浏览器下<A>标签不能显示背景图片
  12. PDF.NET SOD Ver 5.1完全开源
  13. Memcached和Redis简介
  14. MYSQL数据类型和where条件判断
  15. TCP/IP 2MSL
  16. HDU-5157Harry and magic string
  17. SEO—Meta标签优化
  18. spring boot 配置多数据源
  19. odooERP系统(框架)总结
  20. lambda表达式(c++11)

热门文章

  1. Ruby菜鸟入门指南
  2. C#语言基础 Main 函数中的输出输入
  3. windows server 2008 r2 启用 Windows Defender
  4. codeforecs Gym 100286B Blind Walk
  5. PMD 编译 语法分析 词法分析 抽象语法树
  6. JavaScript数组之傻傻分不清系列(split,splice,slice)
  7. 获得函数返回值类型、参数tuple、成员函数指针中的对象类型
  8. 【dp】石子归并
  9. Thinkphp 5 调试执行的SQL语句
  10. 19.Yii2.0框架模型删除记录