equal

Object:

    public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
} 默认情况下:
从超类Object继承而来的equals方法与"=="是完全等价的,比较的都是对象的内存地址。
但我们可以重写equals方法,使其按照我们的需求的方式进行比较,如String类重写了equals方法,使其比较的是字符的序列,而不再是内存地址。 父类: @Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj instanceof Person) {
Person p = (Person) obj;
return super.equals(p) && name.equals(p.name);
}
return false;
} 子类: @Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj instanceof Student) {
Student s = (Student) obj;
return super.equals(s) && name.equals(s.name);
}
return super.equals(obj);
} 比较的元素不能是子类中声明的新变量(拥有统一的语义),否则不能进行混合比较。 如果equals的语义在每个子类中有所改变,就使用getClass检测: @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return name.equals(student.name);
}

hashCode

Object:

    @HotSpotIntrinsicCandidate
public native int hashCode(); Student类: @Override
public int hashCode() {
return Objects.hash(name);
} public static int hash(Object... values) {
return Arrays.hashCode(values);
} public static int hashCode(Object a[]) {
if (a == null)
return 0; int result = 1; for (Object element : a)
result = 31 * result + (element == null ? 0 : element.hashCode()); return result;
} 重写equals()的同时还得重写hashCode(),主要是针对映射相关的操作(Map接口): 如果两个对象通过调用equals方法是相等的,那么这两个对象调用hashCode方法必须返回相同的整数。 Map接口的类会使用到键对象的哈希码: Java使用hashCode()来获取对象的哈希码,其值就是对象的存储地址,这个方法在Object类中声明,因此所有的子类都含有该方法。 当我们调用put方法或者get方法对Map容器进行操作时,都是根据键对象的哈希码来计算存储位置的, 因此如果我们对哈希码的获取没有相关保证,就可能会得不到预期的结果。 如果两个对象通过调用equals方法是不相等的,不要求这两个对象调用hashCode方法必须返回不同的整数(HashMap)。
但是对不同的对象产生不同的hash值可以提高哈希表的性能。

equal 与 hashCode的更多相关文章

  1. EqualsBuilder和HashCodeBuilder(重写equal和hashcode)

    EqualsBuilder和HashCodeBuilder 自动化hashCode()和equals()  问题产生:当需要自动实现hashCode()和equals()方法  解决方法:使用Equa ...

  2. hashmap的equal和hashcode为什么要同时重写

    如果你重载了equals,比如说是基于对象的内容实现的,而保留hashCode的实现不变,那么很可能某两个对象明明是“相等”,而hashCode却不一样. 这样,当你用其中的一个作为键保存到hashM ...

  3. java 如何重写equal 和hashcode方法(最佳实践)

    先看完理解这篇:Java hashCode() 和 equals()的若干问题解答 实现高质量的equals方法的诀窍包括 使用==操作符检查“参数是否为这个对象的引用”: 使用instanceof操 ...

  4. Java中hashcode,equals和==

    hashcode方法返回该对象的哈希码值. hashCode()方法可以用来来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的位置,Map在搜索一个对象的时候先通过has ...

  5. java中间==、equals和hashCode差额

    java于==.equals().hashCode()和比较两个对象. 关于== ==是easy理解的.java设计java就是要比較两个对象是不是同一个对象. 对于引用变量而言.比較的时候两个引用变 ...

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

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

  7. equals和hashcode 和 ==方法说明

    java中==.equals().hashCode()都和对象的比较有关,在java中这三者各有什么用处呢,即java中为什么需要设计这三种对象的比较方法呢? 关于== ==是容易理解的.java设计 ...

  8. 牛客网Java刷题知识点之equals和hashcode()

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  9. hashCode() 和 equals()的问题解答及重写示范

    本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() 与 == 的区别是什么? 3 hashCode() 的作用是什么? 4 hashCode() 和 equa ...

随机推荐

  1. 构造+数位dp

    参考博客: 题目链接: 题意:给定正整数a,b,k,你的任务是在所有满足a<=n<=b中的整数n中,统计有多少个满足n自身是k的倍数,且n的各位数字之和也是k的倍数. [思路] 这种题的固 ...

  2. kafka消息深入学习

    Kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域. 1  快写  快读 看下面的图: 传统应用是  硬件到缓存,到应用 再socket进行传输,再进行网络传输,再到用 ...

  3. 实现简单的PHP接口,以及使用js/jquery ajax技术调用此接口

    主要介绍下如何编写简单的php接口,以及使用js/jquery的ajax技术调用此接口. Php接口文件(check.php): <?php $jsonp_supporter = $_GET[‘ ...

  4. 转载:mysql sql_safe_updates 分析

    今天看到一个很实用的功能,mysql_safe_updates. 只是对功能做了转载,具体原理可以看一下 delete from table t where true ; update t set c ...

  5. Django项目从新建到运行

    返回主目录:Django框架 内容目录: 一.安装之前 二.Django安装 三.创建项目 四.配置 一.安装之前 安装django之前你需要注意的几个事项: 1.版本问题 建议使用1.11.11左右 ...

  6. C# ASCII码和英文字母相互转换和ASCII码对照表

    1.字母转换成ASCII码 string str = "hello"; ]; array = System.Text.Encoding.ASCII.GetBytes(str); / ...

  7. echats问题

    echats 横轴显示不下datazoom配置,加入滚动条 实例博客  https://blog.csdn.net/Zheng_xiao_xin/article/details/80882113 常用 ...

  8. QueryList.class.php很方便的一个采集数据工具。

    QueryList.class.php是一个非常方面的网站数据采集工具.可以在这个上面采集别的网站数据. /*调用开始*/ require 'QueryList.class.php';header(' ...

  9. jq-demo-点击改变图片

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. Async_Study

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...