关于Object类的equals的特点,对于非空引用:

1.自反性:x.equals(x) return true ;

2.对称性:x.equals(y)为true,那么y.equals(x)也为true;

3.传递性:x.equals(y)为true,y.equals(z)为true,那么x.equals(z)也为true;

4.一致性:x.equals(y)的第一次调用为true,那么x.equals(y)的第二次,第三次,。。。,第n次调用也为true,前提条件是在比较之间没有修改x,也没有修改y。

5.x.equals(null)返回false。

当override equals方法时,同时需要重写hashCode方法,以保证相同对象的hashCode值相同。

关于Object类的hashCode方法的特点:

1.在java应用的一次执行过程当中,对于同一个对象的hashCode方法的多次调用,应该返回同样的值。(前提是该对象的信息没有发生改变);

2.对于两个对象来说,如果使用equals方法比较返回true,那么这两个对象的hashCode值一定是相同的;

3.对于两个对象来说,如果使用equals方法比较返回false,那么这两个对象的hashCode值不要求一定不同,也就是说可以相同,也可以不同。但是,如果不同,则可以提高应用的性能。

4.对于Object类来说,不同的Object对象的hashCode值是不同的(Object类的hashCode值表示的是对象的地址,其他类如果重写了hashCode()方法,那么hashCode值就不一定表示的是地址了)。

如果我们重写equals方法,那么有也要重写hashCode方法,反之依然。

集合增加时的原理:

当使用HashSet时,hashCode()方法就会被调用,判断已经存储在集合中的对象的hashCode值是否与增加的对象的hashCode值一 致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对 象,否则加进去。

String s1 = new String("a");
String s2 = new String("a");
System.out.println(s1..hashCode() == s2..hashCode());//返回true
HashSet set = new HashSet();
set.add(s1);
set.add(s2);

结果只会增加一个。因为String类重写了equals和hashCode方法,hashCode方法只是将字符串的内容通过一定的转换,转换成一个整数值。所以,String类的equals方法,只要两个字符串内容相同,则equals返回true。

另外一个例子:

首先,定义一个People类,未重写equals方法和hashCode方法。

    public class People
{
private String name;
public People(String name)
{
super();
this.name = name;
}
//省略get/set方法
}
People p1 = new People("a");
People p2 = new People("a");
set.add(p1);
set.add(p2);

执行结果:

P1和P2都会加到set集合里面去,因为People类继承自Object类,Object类的hashCode()方法返回的值是地址的一种表现形式,因为P1和P2地址是不相同的,所以hashCode值也是不相同的,所以都会被加入到set集合里面。

关于Object类的equals方法和hashCode方法的更多相关文章

  1. equals()方法和hashCode()方法详解

    equals()方法和hashCode()方法详解 1. Object类中equals()方法源代码如下所示: /** * Object类中的equals()方法 */ public boolean ...

  2. 详解equals()方法和hashCode()方法

    前言 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.equals()和hashCode()都不是final方 ...

  3. Java基础系列-equals方法和hashCode方法

    原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述         equals方法和hashCode方法都是有Object类定义的. publi ...

  4. Java 如何重写对象的 equals 方法和 hashCode 方法

    前言:Java 对象如果要比较是否相等,则需要重写 equals 方法,同时重写 hashCode 方法,而且 hashCode 方法里面使用质数 31.接下来看看各种为什么. 一.需求: 对比两个对 ...

  5. 详解 equals() 方法和 hashCode() 方法

    创建实体类时,最好重写超类(Object)的hashCode()和equals()方法 equals()方法: 通过该实现可以看出,Object类的实现采用了区分度最高的算法,即只要两个对象不是同一个 ...

  6. HashSet中存方用户自己定义数据类型数据,重写equals方法和hashCode方法

    import java.util.Set; import java.util.HashSet; public class SetTest { public static void main(Strin ...

  7. java中equals方法和hashcode方法的区别和联系,以及为什么要重写这两个方法,不重写会怎样

    一.在Object类中的定义为:public native int hashCode();是一个本地方法,返回的对象的地址值.但是,同样的思路,在String等封装类中对此方法进行了重写.方法调用得到 ...

  8. Java equals()方法和hashCode()方法

    equals()方法 如果满足了以下任何一个条件,就不需要覆盖equals()方法: 1 类的每个实例本质上都是唯一的. 2 不关心类是否提供了“逻辑相等”的测试功能. 3 父类已经覆盖了equals ...

  9. JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法

    在实际应用中经常会比较两个对象是否相等,比如下面的Address类,它有两个属性:String province 和 String city. public class Address { priva ...

随机推荐

  1. python学习之路-第五天-python的数据结构

    数据结构 1. 列表 例子: #!/usr/bin/python # Filename: using_list.py # This is my shopping list shoplist = ['a ...

  2. pyton全栈开发从入门到放弃之数据类型与变量

    一.变量 1 什么是变量之声明变量 #变量名=变量值 age=18 gender1='male' gender2='female' 2 为什么要有变量 变量作用:“变”=>变化,“量”=> ...

  3. 测试Windows live Writer

    private String GetRandomint(int codeCount) { Random random = new Random(); string min = "" ...

  4. 60. Permutation Sequence(求全排列的第k个排列)

    The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...

  5. jQuery动画二级下拉菜单

    在线演示 本地下载

  6. javascript设计模式 - 解释器模式(interpreter)

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. COS-3OS的用户接口

    操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口.操作系统的功能包括管理计算机系统的硬件.软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持,让计算机系统所有资源最大限 ...

  8. Spring MVC执行原理和基于Java的配置过程

    一.Spring MVC执行原理和基于Java配置的配置过程 (一)Spring MVC执行过程,大致为7步. 所有的请求都会经过Spring的一个单例的DispacherServlet. Dispa ...

  9. centos7 -lvm卷组

    老忘,记一下   基本的逻辑卷管理概念: PV(Physical Volume)- 物理卷 物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备. ...

  10. 搭建maven项目步骤

    整体项目结构如下: 第一步 第二步 第三步:删除src目录,只留pom文件 第四步: 第五步: 6 7 8 9 10 11 12