equals与Hashcde的区别

news2024/11/26 2:55:01

1、equals与hashCode的区别

equals与hashcode这两个方法都是从Object类中继承过来的。

hashCode():计算出对象实例的哈希地址,并且返回该地址,称哈希函数,又称散列表。

equals():反映的是对象的内存地址或者对象的内容是否相等。

Objeact类实现equals()是对两个对象的地址进行比较(即比较是否相同,也就是内存地址是否相等)。

Object类实现hashCode()方法,其实就是调用C++编写的本地方法,可以理解为产生一个随机数的本地方法。

Java中的两个规则:

1、规则一

如果equals比较的对象的内容相等,那么hashCode一定相等。

2、规则二

如果equals比较的对象内容不相等,那么HashCode也可能相等,也可能不相等。

所以:HashCode如果相同的话,那么对象的值不一定相同。

变量a,b hashCode值相同的原因是,Integer和String类都对hashCode进行重写。

规则三:HashCode如果相等的情况下,equals比较对象不一定相等。(根据规则一、二推出)。

规则四:HashCode如果不相等的情况下,equas比较对象一定不相等(根据规则一、二推出)。

class Dog{
    private String name;
    private int age;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class Test {
    public static void main(String[] args) {
        Dog dog1=new Dog("huahua",11);
        Dog dog2=new Dog("huahua",11);
        System.out.println("dog1的hashcode:"+dog1.hashCode());
        System.out.println("dog2的hashcode:"+dog2.hashCode());
        System.out.println("dog1和dog2的比较结果:"+dog1.equals(dog2));
    }
}
//运行结果:
//dog1的hashcode:460141958
//dog2的hashcode:1163157884
//dog1和dog2的比较结果:false

我们看见比较对象相同,但是hashcode也不相同,违背了规则一,因为我们没有重写,equals

方法。

class Dog{
    private String name;
    private int age;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        Dog dog=(Dog) obj;
        return this.age== dog.age&&this.name.equals(dog.name);
    }
}
public class Test {
    public static void main(String[] args) {
        Dog dog1=new Dog("huahua",11);
        Dog dog2=new Dog("huahua",11);
        System.out.println("dog1的hashcode:"+dog1.hashCode());
        System.out.println("dog2的hashcode:"+dog2.hashCode());
        System.out.println("dog1和dog2的比较结果:"+dog1.equals(dog2));
    }
}
//运行结果:
//dog1的hashcode:460141958
//dog2的hashcode:1163157884
//dog1和dog2的比较结果:true

此时我们可以看到比较对象相同,但是hashcode的值确实不相同的,是因为我们没有重写hashcode。

class Dog{
    private String name;
    private int age;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int hashCode() {
        return Objects.hash(name,age);
    }

    @Override
    public boolean equals(Object obj) {
        Dog dog=(Dog) obj;
        return this.age== dog.age&&this.name.equals(dog.name);
    }
}
public class Test {
    public static void main(String[] args) {
        Dog dog1=new Dog("huahua",11);
        Dog dog2=new Dog("huahua",11);
        System.out.println("dog1的hashcode:"+dog1.hashCode());
        System.out.println("dog2的hashcode:"+dog2.hashCode());
        System.out.println("dog1和dog2的比较结果:"+dog1.equals(dog2));
    }
}
//运行结果:
//dog1的hashcode:1253509196
//dog2的hashcode:1253509196
//dog1和dog2的比较结果:true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/765657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp canvas 生成海报 小程序码 二维码

uniapp canvas 生成超简单海报带小程序码 canvas官网链接&#xff0c;可以先看下官方介绍&#xff0c;更好理解 uniapp官网canvas介绍 一、首先自定义一个生成海报的组件 uni-xcxcanvas.vue&#xff0c;创建同名目录 模板文件代码&#xff1a; <template><view&…

AtcoderABC251场

A - Six CharactersA - Six Characters 题目大意 给定一个由小写英文字母组成的字符串S&#xff0c;S的长度在1到3之间。 打印一个长度为6的字符串&#xff0c;该字符串是S的重复。 思路分析 通过将S重复拼接6次&#xff08;如果给定原字符串最小的情况&#xff09;&#xf…

【LLM】利用RoPE不微调大模型以扩展Context长度(更新中)

note 文章目录 note一、扩展LLM的Context长度1. 常见方法2. PCW方法 二、NBCE方法三、RoPE方法四、FlashAttention方法Reference 一、扩展LLM的Context长度 1. 常见方法 扩展LLM的Context长度其实已有不少&#xff0c;但多数是通过结合检索或者摘要的方式来缩短样本的长Conte…

深入学习 Redis - 常用数据类型,结构认识

目录 一、Redis数据类型 Redis 数据类型结构简单认识 每个数据类型具体的编码方式 1.string 2.hash 3.list 4.set 5.zset 典中典&#xff1a;记数字&#xff01;&#xff01;&#xff01; 6.查看 key 对应 value 的实际编码方式 如果本文有帮助到你&#xff0c;不…

古风编曲用什么软件?水果编曲FL Studio21怎么样

古风编曲需要什么乐器&#xff1f;古风编曲多采用笙、箫、二胡、古筝、琵琶、唢呐、二胡、竹笛、马头琴等中国传统乐器。古风编曲用什么软件&#xff1f;市面上几款热门软件有FL Studio、Cubase、Logic Pro等。 古风编曲需要什么乐器 我们常说的古风歌曲&#xff0c;其实是一…

CocoaPods could not find compatible versions for pod ““:

添加新的 SDK 依赖抛出了如下异常,无法找到可兼容的版本依赖库; [!] CocoaPods could not find compatible versions for pod "HDSSup":In Podfile:HDSSupSpecs satisfying the HDSSup dependency were found, but they required a higher minimum deployment targe…

使用这些ai绘画生成器,再也不愁没有好看的壁纸了

你们最近有没有发现网上开始流行ai绘画&#xff1f;我总是能看到ai绘画出来的图片&#xff0c;犹如下面这些图片。 这些图片是不是好看到&#xff0c;可以作为头像使用了&#xff1f;它们确实是ai绘画出来的&#xff0c;不过现在ai绘画软件众多&#xff0c;你们知道哪一款好用吗…

nvm node yarn

nvm node 以及node 对应的版本的npm相关配置的整理 ##如何设置npm 全局node_modules 安装目录 你可以通过 npm 的配置来设置全局安装的 node_modules 目录。默认情况下&#xff0c;npm 全局安装的包会存储在操作系统的特定目录中&#xff0c;如在 Windows 上为 C:\Users\<…

MySQL日常操作记录

1.查看MySQL版本 select version();2.快速复制表结构&#xff0c;不包含相关主键及约束 create table user_test as select * from user where 12;3.uuid select uuid(),uuid_short();4.替换uuid()里的’-‘为’’ select replace(uuid(),-,);5.md5摘要 select md5(uuid()…

SCT52240双路 4A/4A 高速MOSFET/IGBT栅极驱动器, 可并联输出

SCT52240是是一款宽供电电压、双通道、高速、低测栅极驱动器&#xff0c;包括功率MOSFET&#xff0c;IGBT。单个通道能够提供高达4A拉电流和4A灌电流的轨到轨驱动能力&#xff0c;并实现轨到轨输出。高达24V宽电压范围提高功率器件开关瞬间栅极驱动的振铃幅值裕度。13ns输入输出…

Spring源码学习-核心注解,架构以及整体流程

目录 核心注解核心组件接口分析基础接口ResourceResourceLoaderResourceResourceLoader BeanFactory结构解析图示核心的子接口 BeanDefinition加载注册流程(xml形式的) BeanDefinitionReaderBeanDefinitionRegistryApplicationContext类结构图示结构解析 Aware接口类图xxAware是…

后端Long类型传到前端精度丢失的问题

问题出现&#xff1a;后端的Java Bean的id属性是用的Long类型对应数据库主键使用bigint类型&#xff0c;当使用JSON方式传递该数据给前端时&#xff0c;前端接收到的数据末尾会变成0。&#xff08;发生的精度丢失问题&#xff09; 问题原因&#xff1a;Java中的long能表示的范围…

域名下配置,dns TXT记录,防止任意邮件伪造

每日鸡汤&#xff1a;每个你想要学习的瞬间都是未来的你向自己求救 最近在做一个网页的项目&#xff0c;这个项目和之前的项目的区别是部署在海外的服务器上&#xff0c;为了方便国外的用户访问&#xff0c;所以在埋点统计这块我们就选择了谷歌统计。国内的项目一般使用百度统计…

管道泄漏监测系统:天然气管道泄漏监测

随着我国城市化进程的快速推进&#xff0c;城市燃气管网也不断扩张&#xff0c;规模日益庞大&#xff0c;地下管线错综复杂&#xff0c;城市燃气管网的建设和运营面临着越来越多的挑战。然而&#xff0c;很多城市在建设过程中过于注重地上设施&#xff0c;对地下管网的科学管控…

ORCA优化器浅析——​MD Accessor的三级缓存

分析​MD Accessor对元数据的缓存能力 set client_min_messageslog; set optimizer to on; set optimizer_print_optimization_stats to on; --执行SQLoptimizer_print_optimization_stats GUC会打印处ORCA优化器优化流程中的各步骤的统计数据。分析打印日志如下&#xff0c;由…

[分布式] Ceph实战应用

目录 一、建 CephFS 文件系统 MDS 接口服务端操作客户端操作 二、创建 Ceph 块存储系统 RBD 接口创建 Ceph 对象存储系统 RGW 接口OSD 故障模拟与恢复 一、建 CephFS 文件系统 MDS 接口 服务端操作 1&#xff09;在管理节点创建 mds 服务 cd /etc/ceph ceph-deploy mds creat…

流程图实现,基于vue2实现的流程图

1.基本思路 flex布局 伪元素实现竖直的连接线组件递归 2.效果图 2.1基础的&#xff08;未截全&#xff0c;大致长这样&#xff09; 2.2带有收缩功能的&#xff0c;可以展开和收缩并显示数量 3.待需要优化的点&#xff0c;根节点居中是基于整个流程图大小的来居中的&#xf…

【Spring Boot】Spring Boot的系统配置 — 实战:实现系统多环境配置

实战&#xff1a;实现系统多环境配置 在实际项目开发的过程中&#xff0c;需要面对不同的运行环境&#xff0c;比如开发环境、测试环境、生产环境等&#xff0c;每个运行环境的数据库、Redis服务器等配置都不相同&#xff0c;每次发布测试、更新生产都需要手动修改相关系统配置…

delete删除的数据如何恢复?delete删除的数据找回

在数字时代&#xff0c;我们经常处理大量的数据&#xff0c;无论是工作、学习还是个人生活。然而&#xff0c;数据的增多也带来了新的挑战&#xff0c;其中最令人头疼的便是数据丢失问题&#xff0c;例如因操作失误而删除了重要的文件或数据。本文将探讨如何恢复delete删除的数…

租赁小程序开发|在线租赁小程序开发|租赁系统源码

近年来&#xff0c;随着共享经济的兴起&#xff0c;租赁服务逐渐成为了人们生活中不可或缺的一部分。为了方便用户租赁物品或者服务&#xff0c;租赁小程序应运而生。租赁小程序开发具有许多功能优势&#xff0c;使其成为租赁行业的重要工具。本文将介绍一些租赁小程序开发的功…