Object类的equals 方法 用来检测两个对象是否相等,即两个对象的内容是否相等,区分大小写。
 
(一)说到equals方法,不得不提一下==号。
==用于比较引用和比较原生数据类型时具有不同的功能:
a)比较原生数据类型,如果两个值相同,则结果为true
b)而在比较引用时,如果引用指向内存中的同一对象,结果为true
 
(二)下面是equals方法跟==号使用的比较:
 
Eg:s1 = new String("sony"); //创建的是字符串对象,用new方法生成的字符串对象,引用指向的是堆中的对象。
s1.equals("sony");               //返回true,比较的是内容
s1 == "sony"                      //返回false,比较的是 是否指向同一对象对象,此处的sony是字符串池中的对象
 
//如果
s1 = "sony";                       //用等号赋值,s1指向字符串池中的对象
s1 == "sony"                      //返回true
 
//如果
s1 = "sony";
s2 = "sony";                      //都指向字符串池的对象
s1.equals(s2); 或者string.equals(s1,s2);//返回true
 

(三)关于Object类的equals方法有以下特点

a)自反性:x.equals(x)应该返回true

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

c)传递性:x.equals(y)为true 并且 y.equals为 true,那么x.equals(z)也应该为true

d) 一致性:x.equals(y)的第一次调用为true,那么x.equals(y)的第二次第三次第N次调用也是true,前提示没有修改x和y

e)对于非空引用x,x.equals(null)返回false

---------------------------------

---------------------------------

hashcode方法

(一)hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值 ,public int hashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。

(二)一致性:在程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行hashcode比较时所用的信息没有被修改。

(三)与equals方法的关系

如果根据Object类中的equals(Object) 方法,两个对象是相等的,那么对这两个调用 hashCode 方法都必须生成相同的整数结果。
但是,如果两个hashCode()返回的结果相等,则两个对象的equals方法不一定相等。
如果根据equals(java.lang.Object)方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法计算生成的结果可能相等。
 

(四)通常在我们写一个类的时候,往往要重写hashCode方法和equals方法,因为通常比较这个类的对象是不是相同往往要根据实际情况考虑,例如:person()类,我们现在认为name属性相同就是同一个people,那么我们可以在person()类内重写hashCode方法和equals方法,使得person1.equals(person2)在它们的name属性相同时就返回true。

equals方法,hashcode()方法的更多相关文章

  1. Java中的equals和hashCode方法

    本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要 ...

  2. Java提高篇——equals()与hashCode()方法详解

    java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继 ...

  3. Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)

    Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例  原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...

  4. 【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例

    原文地址:http://www.cnblogs.com/luankun0214/p/4421770.html 感谢网友的分享,记录下来只为学习. 1.重写equals方法实例   部分代码参考http ...

  5. java集合(3)- Java中的equals和hashCode方法详解

    参考:http://blog.csdn.net/jiangwei0910410003/article/details/22739953 Java中的equals方法和hashCode方法是Object ...

  6. 探索equals()和hashCode()方法

    探索equals()和hashCode()方法 在根类Object中,实现了equals()和hashCode()这两个方法,默认: equals()是对两个对象的地址值进行的比较(即比较引用是否相同 ...

  7. java基础(十六)----- equals()与hashCode()方法详解 —— 面试必问

    本文将详解 equals()与hashCode()方法 概述 java.lang.Object类中有两个非常重要的方法: public boolean equals(Object obj) publi ...

  8. Java中的equals和hashCode方法详解

    Java中的equals和hashCode方法详解  转自 https://www.cnblogs.com/crazylqy/category/655181.html 参考:http://blog.c ...

  9. Java Hash集合的equals()与hashCode() 方法

    Java 集合实现类,无论是HashSet.HashMap等所有的Hash算法实现的集合类(后面简称Hash集合),加入的对象必须实现 hashCode() 与 equals() 方法,稍微不同的地方 ...

  10. 为什么要重写equals和hashcode方法

    equals hashcode  当新建一个java类时,需要重写equals和hashcode方法,大家都知道!但是,为什么要重写呢? 需要保证对象调用equals方法为true时,hashcode ...

随机推荐

  1. 使用 Sahi 实现 Web 自动化测试

    Sahi 是 Tyto Software 旗下的一个基于业务的开源 Web 应用自动化测试工具.Sahi 运行为一个代理服务器,并通过注入 JavaScript 来访问 Web 页面中的元素.Sahi ...

  2. jmeter接口自动化,你敢想,我敢玩

    飞测说:大家好,我是黑夜小怪,今天我又来了分享了.最近用jmeter比较多,做过自动化测试的都知道,我们脚本和数据维护是你十分头疼的事情,刚好黑夜小怪我最近接触到一个项目的接口测试,今天我们一起分享下 ...

  3. Objective-C的内存管理

    一.Objective-C内存管理的对象 1. 值类型:比如int.float.struct等基本数据类型. 值类型会被放入栈中,在内存中占有一块连续的内存空间,遵循先进后出的原则,故不会产生碎片. ...

  4. HTML5自定义属性对象dataset

    前面转载的"图片懒加载",因为基础不好,里面判断dataset的语句看不懂,经别人推荐找到一篇专门讲解dataset的文章,我心甚悦^ http://www.zhangxinxu. ...

  5. 如何查看IIS并发连接数

    如果要想知道确切的当前网站IIS连接数的话,最有效的方法是通过windows自带的系统监视器来查看. 一.运行-->输入"perfmon.msc". 二.在"系统监 ...

  6. js实现简单的滑动门和tab选项卡

    思想:首先定义三个选项卡,可以用任何标签,只要如下图, 一共有三个ul,第一个ul给一个class,因为默认第一个选项卡的内容显示出来, 其他两个ul  display:none: 当我鼠标移到第二个 ...

  7. tomcat 页面管理

    <role rolename="admin-gui"/> <role rolename="manager-gui"/> <user ...

  8. Windows Server 2012下安装Hyper-V虚拟机

    Windows Server 2012下安装Hyper-V虚拟机 Win server 2012系统中Hyper-V 性能进一步提高,广大爱好者都尝试体验它,可是有不少朋友无法正确安装虚拟机,尽管在网 ...

  9. Windows phone 8 学习笔记(1) 触控输入(转)

    Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此在输入方式上引入一套全新的触控操作方式,我们需要重新定义相关的事 ...

  10. linux 内核(驱动)常用函数

    2.4.1 内存申请和释放 include/linux/kernel.h里声明了kmalloc()和kfree().用于在内核模式下申请和释放内存.    void *kmalloc(unsigned ...