Object类是所有类、数组、枚举类的父类,是类层次结构的根类。每个类都使用Object作为超类。所有对象(包括

数组)都实现这个类的方法。

Object类实现了以下方法:

我们来看看源码中hashCode()方法:

public native int hashCode();

Object.hashCode() 就是一个哈希函数,用来计算散列值以实现哈希表这种数据结构。

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

hashCode 的常规协定是:

1、在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是

将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,

该整数无需保持一致。

2、如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用hashCode 方法都必须生

成相同的整数结果。

3、如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用hashCode

方法 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高

哈希表的性能。

实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象

的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)

在实际开发中,除了重写了hasCode()方法时,还要重写equals()方法。

我们来看看源码中equals()方法:

public boolean equals(Object obj) {return (this == obj);}

我们从以上程序中可以看出equals()方法的作用就是与某个对象进行比较,是否相等。

equals 方法在非空对象引用上实现相等关系:

1、自反性:对于任何非空引用值xx.equals(x) 都应返回true

2、对称性:对于任何非空引用值xy,当且仅当y.equals(x) 返回true 时,x.equals(y) 才应返回true

3、传递性:对于任何非空引用值xyz,如果x.equals(y) 返回true,并且y.equals(z) 返回true,那么x.equals(z)

应返回 true

4、一致性:对于任何非空引用值xy,多次调用x.equals(y) 始终返回true 或始终返回false,前提是对象上


equals 比较中所用的信息没有被修改。

5、对于任何非空引用值 xx.equals(null) 都应返回false

Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值xy,当且仅当x

y 引用同一个对象时,此方法才返回 truex == y 具有值true)。

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等

对象必须具有相等的哈希码。

关于如何重写equals()和hashCode()方法请参看以下程序:

class User {private String name;protected String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic boolean equals(Object obj) {if (obj == null || !(obj instanceof User)) {return false;}else{return true;}}@Overridepublic int hashCode() {return 30;}
}
public class Main {public static void main(String[] args) {User u1 = new User();u1.setName("GU");User u2 = new User();u2.setName("Bill");System.out.println(u1.equals(u2));}}

输出结果:

true

在上面程序中,User类中重写了equals()方法和hashCode()方法。

转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/43899101    情绪控_

Java学习笔记13相关推荐

  1. java学习笔记(13) 第13章 - 常用类

    第13 章常用类-目录 13.1 包装类 13.1.1 包装类的分类.包装类和基本数据的转换.案例演示.课堂测试 13.1.2 包装类型和String 类型的相互转换 13.1.3 Integer 类 ...

  2. java学习笔记13:正则表达式、System类、Date类、Calendar类

    一.正则表达式 1.概述:是指一个用来描述或者匹配一系列符合某个句法规则的字符串:其实就是一种规则,有自己特殊的应用. 2.正则表达式的组成规则 (1).字符 表达式 代表含义 x 字符 x.举例:' ...

  3. Java学习笔记13(equals()方法;toString()方法)

    equals()方法: equals方法是Object类中的方法:Object是所有类的祖宗,所以所有类都有equals()方法: boolean equals(Object obj); equals ...

  4. java 量化指标_量化投资学习笔记13——各种指标的绘图、计算及交易策略

    <量化投资:以python为工具>第五部分笔记 先来画k线图,要注意finance模块已经从matplotlib库中去除,现在要用mpl_finance库,单独安装. 其中有candles ...

  5. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  6. java学习笔记十三

    11. 凡是继承了FilterOutputStream或FilterInputStream的类都是过滤流,也就是说他们不能直接跟目标(键盘,文件,网络等,节点流可以)数据打交道,只能包装 Intput ...

  7. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  8. Java学习笔记22:并发(2)

    Java学习笔记22:并发(2) 图源:PHP中文网 终止任务 终止线程有一种非常简单的方式:设置一个多线程共享的标记位,子线程用轮询的方式检查这个标记位,如果该标记位显示取消状态,就让子线程退出执行 ...

  9. 【java学习笔记day01】运行第一个程序Helloworld!

    java学习笔记day01 2.什么是软件工程师? 3.什么是软件? 4.开发软件需要计算机编程语言,计算机编程语言有很多,例如 c, c++,Java,NET,c#,php... 5.Java软件工 ...

最新文章

  1. 十一、Android学习第十天——项目开始(转)
  2. UA MATH565C 随机微分方程V 无穷小生成算子
  3. 英雄联盟手游火线妹上线了!金克丝也想成为第一AD吗?
  4. 常用中后台交互设计控件使用场景与规范总结
  5. 别再吼孩子骂孩子了,他们的脑子真的会受伤变形
  6. 演练 多班分数录入统计优秀人数
  7. python中的update是什么意思_python 字典中的Update()函数
  8. bootstrap 专注前端开发
  9. 保持ssh的连接不断开
  10. 如何看懂常用原理图符号、如何阅读原理图
  11. oracle的报告,Oracle数据库(RAC)巡检报告
  12. 《三国志·战略版》爆火,友盟+助力手游实现高效促活
  13. 有图有真相——MD瞬间被移动扣了90多M流量加9元钱
  14. 聚观早报 | Apple Music推出新功能;苹果汽车最早于2026年发布
  15. 路再长也有尽头,别往回走
  16. 使用GitHub Actions通过CI提高代码质量
  17. Kubernetes 中 Evicted pod 是如何产生的
  18. 华为云区块链三大核心技术国际标准立项通过
  19. s:checkbox
  20. 如何判断一个动作是深蹲还是硬拉?

热门文章

  1. 如何通过 DJI SDK 控制无人机运动
  2. 12 HTML5中的影音播放
  3. vue数据源转json问题
  4. 2016年第31周四
  5. Java 8怎么了:局部套用vs闭包
  6. 有关nginx location规则
  7. 无刷新读取数据库 (ajax)
  8. java中如何取到一个对象的所有属性值,并且在创建一个相同的对象
  9. 打造属于自己的图文符号库
  10. 让产品自己召唤人——马化腾