equals()与 == 比较,hashCode方法

1.Object类
    Object类是java中一切类的父类,java中所有的类都直接或间接
    继承自Object类
    
    Object中定义的方法不多,原因在于,java的类多种多样,他们的共
    性不多,Object只将所有类都应具备的共性定义在其中
    
    所有的类都是Object的子类,那么所有类都应用Object定义的方法
    其中常用的有:toString(),equals(),hashCode()等
    
    toString()方法:经常有系统API调用,此方法的返回值为String
                     类型,这个字符串应描述当前对象.
                     
    Object类中的toString()方法:返回的是对象的句柄的字符串形
                                                   式.格式:全限定名@hashcode
                               [email protected]
                               
    Object类建议我们覆盖其toString()方法.
    
2.equals()方法:
    此方法的意图在于比较两个对象的内容是否相等
    比较对象分为两种:"引用相等" 和 "对象相等"                           
    比较引用相等使用:"=="                           
    比较对象相等使用: a.equals(b).对象.equals()方法
    
    如何记忆:
        引用比较"==":是不是同一个人
        对象内容比较"equal":他们长得像不像
    
    Object建议我们覆盖equals方法.若不覆盖,Object方法实现的
    equals()方法为比较引用"=="
    Object的equals方法:
        public boolean equals(Object obj){
            return this == obj;
        }                               
    
    覆盖equals的规则:
        自反性:对于任何非空引用值x,x.equals(x)都应返回true
        对称性:对于任何非空引用值x,y
                   当且仅当x.equals(y)时,y.equals(x)才返回true
        传递性:对于任何非空引用值x,y,z
                若x.equals(y)为true,且y.equals(z)为true,那么
               x.equals(z)也应为true
        一致性:对于任何非空引用值x,y.多次调用x.equals(y)应
                    一直保持true或false.前提是x或y的内容没有改变
                    过
                   对于任何非空引用值x,x.equals(null)始终为false                             
                               
3.hashCode方法:
        hashCode()方法返回一个整数值(哈希值)                           
           若我们重写了equals()方法,那么就一定要重写hashCode()
           int值返回原则:
               当两个对象equals()比较为true,那么他们应具有相同
               的hashCode()值
               当两个对象equals()比较为false,那么他们应具有不同
               的hashCode()值
               hashCode()值要稳定(一致性).一个对象在创建以后就不
               应再变化
               
           Object提供的hashCode()方法返回的是堆内存当前对象的地
           址的hashCode(int整数)值,注意,不是实际的物理地址.
               
                                                                     若有不完善的地方请大家多提意见,转发时请注明出处!

时间: 2024-10-06 09:11:01

equals()与 == 比较,hashCode方法的相关文章

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

前言 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.equals()和hashCode()都不是final方法,都可以被重写(overwrite). 本文介绍了2种方法在使用和重写时,一些需要注意的问题. 一.equal()方法 Object类中equals()方法实现如下: public boolean equals(Object obj) { return (this == obj); } 通过该实现

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

import java.util.Set; import java.util.HashSet; public class SetTest { public static void main(String[] args) { /* *对于用户自定义类型的数据放在容器(Set)中 *务必重写equals和hashCode方法 *要不然stu1和stu2放在容器中,和认为是两个不同的元素 **/ //set中存放的元素是无序的 //set中存储的元素是不可以重复的(根据equals方法和hashCod

关于Object类的equals方法和hashCode方法

关于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,也没

java基础解析系列(十一)---equals、==和hashcode方法

java基础解析系列(十一)---equals.==和hashcode方法 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---Integer缓存及装箱拆箱 java基础解析系列(三)---HashMap原理 java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(五)---HashMap并发下的问题以及HashTable和CurrentHashMap的区别 j

重写equals()方法和 hashCode()方法

java中判断两个对象是否相等的规则:首先,判断两个对象的hashCode是否相等 如果不相等,认为两个对象也不相等 如果相等,则判断两个对象用equals运算是否相等 如果不相等,认为两个对象也不相等 如果相等,认为两个对象相等 我们在equals方法中需要向下转型,效率很低,所以先判断hashCode方法可以提高效率. equals()相等的两个对象,hashcode()一定相等: equals()不相等的两个对象,却并不能证明他们的hashcode()不相等. 1,所有Java类都继承自O

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

在实际应用中经常会比较两个对象是否相等,比如下面的Address类,它有两个属性:String province 和 String city. public class Address { private String province; private String city; public String getProvince() { return province; } public void setProvince(String province) { this.province = p

Java重写equals方法和hashCode方法

package com.ddy; public class User {     private Integer id; private String name; private String address; private String phone; public Integer getId() {         return id;     } public void setId(Integer id) {         this.id = id;     } public Strin

【Java实战】源码解析为什么覆盖equals方法时总要覆盖hashCode方法

1.背景知识 本文代码基于jdk1.8分析,<Java编程思想>中有如下描述: 另外再看下Object.java对hashCode()方法的说明: /** * Returns a hash code value for the object. This method is * supported for the benefit of hash tables such as those provided by * {@link java.util.HashMap}. * <p> *

JAVA中equals方法与hashCode方法学习

首先参考文章:http://www.oschina.net/translate/working-with-hashcode-and-equals-methods-in-java 1,equals方法的比较与 == 的区别是什么?为什么需要重写equals方法? 2,为什么说重写了equals方法最好重写hashCode方法?该问题在参考博文里面有一个实例解释了原因. 3,如何重写equals方法和hashCode方法? ——————————————————————————————————————

static,final关键字,Object类的tostring方法,equals方法,hashCode方法

1)static关键字 static可以修饰:属性.方法.代码块 静态方法不能访问非静态 属性 或 方法 属性(变量): 成员变量: 静态变量: 通过 类名.静态变量来访问 通过 对象名.静态变量来访问(是有警告的) 存在于方法区中,有且仅有一份 非静态变量 局部变量 代码块 代码块的执行顺序 1.静态代码块:哪个静态代码块放在前边,就先执行谁 2.普通代码块:哪个普通代码块放在前边,就先执行谁 3.构造方法 如果有两个类,一个类是Father,另一个类是Child , Child 继承了 Fa