浅析equals与HashCode

几款支持国标GB28181的平台以及视频监控设备接入的配置方法(Web端无插件播放) GB28181解决的一个主要问题就是如何远程、跨网络、跨区域、跨级别的访问网络中的监控设备(包括IPC、NVR等),本文介绍几款G28181平台的接入配置方法,适合有监控视频摄像头的远程接入和预览需求的人群参考使用。 阅读详情

在实际工作中或者面试中总会遇到下面的Java基础:

  • [x] equals方法
  • [x] hashCode方法
  • [ ] 接口和抽象类

equals方法

equals使用的协议或者准则:

  1. 自反性 x.equals(x) = true
  2. 对称性 x.eqlas(y) = y.equals(x)
  3. 传递性 x.eqlas(y) = true && y.equals(z)=true 则 x.equals(z)=true
  4. 一致性 每次调用返回的结果应该一致(如果参与equals判断的字段没有改变)
  5. x.equals(null) = false
  6. x==y 则x.equals(y)=true
  7. equal objects must have equal hash codes
  8. 如果x.equals(y),如果x和y的类型不一致,应该返回false
    /**
     * Indicates whether some other object is "equal to" this one.
     * <p>
     * The {@code equals} method implements an equivalence relation
     * on non-null object references:
     * <ul>
     * <li>It is <i>reflexive</i>: for any non-null reference value
     *     {@code x}, {@code x.equals(x)} should return
     *     {@code true}.
     * <li>It is <i>symmetric</i>: for any non-null reference values
     *     {@code x} and {@code y}, {@code x.equals(y)}
     *     should return {@code true} if and only if
     *     {@code y.equals(x)} returns {@code true}.
     * <li>It is <i>transitive</i>: for any non-null reference values
     *     {@code x}, {@code y}, and {@code z}, if
     *     {@code x.equals(y)} returns {@code true} and
     *     {@code y.equals(z)} returns {@code true}, then
     *     {@code x.equals(z)} should return {@code true}.
     * <li>It is <i>consistent</i>: for any non-null reference values
     *     {@code x} and {@code y}, multiple invocations of
     *     {@code x.equals(y)} consistently return {@code true}
     *     or consistently return {@code false}, provided no
     *     information used in {@code equals} comparisons on the
     *     objects is modified.
     * <li>For any non-null reference value {@code x},
     *     {@code x.equals(null)} should return {@code false}.
     * </ul>
     * <p>
     * The {@code equals} method for class {@code Object} implements
     * the most discriminating possible equivalence relation on objects;
     * that is, for any non-null reference values {@code x} and
     * {@code y}, this method returns {@code true} if and only
     * if {@code x} and {@code y} refer to the same object
     * ({@code x == y} has the value {@code true}).
     * <p>
     * Note that it is generally necessary to override the {@code hashCode}
     * method whenever this method is overridden, so as to maintain the
     * general contract for the {@code hashCode} method, which states
     * that equal objects must have equal hash codes.
     *
     * @param   obj   the reference object with which to compare.
     * @return  {@code true} if this object is the same as the obj
     *          argument; {@code false} otherwise.
     * @see     #hashCode()
     * @see     java.util.HashMap
     */
    public boolean equals(Object obj) {
        return (this == obj);
    }

hashCode方法

为对象提供一个标示值,常常用在HashMap或者HashTable中,hashCode方法的规则如下:

  1. 一个应用程序一个执行片段(线程)中HashCode值应该不变,但是并不需要保证在两个不同的执行片段中HashCode值也要相等
  2. equal的两个对象的HashCode值需要保证相等
  3. not equal的两个对象的HashCode值不需要保证不相等,但是如果可以不一致能够提高HashMap等的效率
  4. Object类的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>
     * The general contract of {@code hashCode} is:
     * <ul>
     * <li>Whenever it is invoked on the same object more than once during
     *     an execution of a Java application, the {@code hashCode} method
     *     must consistently return the same integer, provided no information
     *     used in {@code equals} comparisons on the object is modified.
     *     This integer need not remain consistent from one execution of an
     *     application to another execution of the same application.
     * <li>If two objects are equal according to the {@code equals(Object)}
     *     method, then calling the {@code hashCode} method on each of
     *     the two objects must produce the same integer result.
     * <li>It is <em>not</em> required that if two objects are unequal
     *     according to the {@link java.lang.Object#equals(java.lang.Object)}
     *     method, then calling the {@code hashCode} method on each of the
     *     two objects must produce distinct integer results.  However, the
     *     programmer should be aware that producing distinct integer results
     *     for unequal objects may improve the performance of hash tables.
     * </ul>
     * <p>
     * As much as is reasonably practical, the hashCode method defined by
     * class {@code Object} does return distinct integers for distinct
     * objects. (This is typically implemented by converting the internal
     * address of the object into an integer, but this implementation
     * technique is not required by the
     * Java&trade; programming language.)
     *
     * @return  a hash code value for this object.
     * @see     java.lang.Object#equals(java.lang.Object)
     * @see     java.lang.System#identityHashCode
     */
    public int hashCode() {
        return identityHashCode(this);
    }
3D Slicer学习记录(4)-PLUSapp连接双目相机Intel Realsense plusapp是基于openIGTLink协议的免费的开源库和应用程序API接口,用于数据采集、预处理、校准和实时流成像、位置跟踪和其他传感器数据。这里以intel realsense双目相机为例详细的演示整个图像流导入到3D Slicer的流程。 阅读详情

相关推荐

基于Ollama本地大模型的Python自动化翻译工具开发实践

本文详细介绍了如何利用Ollama本地大模型和Python开发自动化批量翻译工具。通过部署本地开源模型、设计精准提示词、处理长文本分割及多种文档格式,构建了一个兼顾隐私安全、可控性与成本效益的翻译流水线,有效解决了文档批量翻译的痛点。

yhn45678901的博客 560

浅析hashCode()、equals()

一、equals() equals()方法用来比较两个对象是否相等,在Object类中,equals方法和“==”一样,都是比较栈内存中存储的内存地址。再到String类,重写了equals方法后,比较的是值是否相同。所以,我们可以在自定义的类中重写equals方法来实现自定义的比较。 public class TestEqueals { public static void main(...

Daniel的博客 202

自抗扰(ADRC)控制原理及控制器设计

自抗扰控制原理以及控制器设计

weixin_43487974的博客 3万+

浅析Java的HashCode,以及equals

  1.JDK规定,equals相等的两个对象hashCode也必须相等,这两个方法都是从Object上面继承而来的,通过观察JDK源码可以发现Object的equals方法是对2个对象的地址(逻辑地址,也就是在JVM中映射一个物理地址)比较,而hashCode又是一个本地方法,其实hashCode就是内存中的一个地址,换句话说,2个相等的对象(地址相等)那么他们的hashCode也肯定是相等的,...

weixin_34041003的博客 102

innovus 命令每日精要 | 掌控Innovus布线的利器——setNanoRouteMode详解

在数字IC后端设计的复杂世界里,布线优化是至关重要的一步。今天,我来给大家深入讲解Innovus工具中setNanoRouteMode命令的精妙之处,让你轻松驾驭布线策略,提升设计质量。setNanoRouteMode是Innovus中用于配置NanoRoute绕线行为的关键命令。通过其丰富的参数,你可以精细控制布局后阶段的绕线策略、信号完整性优化、工艺适配及设计规则修复等流程。下面,我将按功能分类总结其核心选项,并针对不同场景给出建议。

weixin_50820814的博客 3528

Matlab实战:从零搭建弹道导弹六自由度仿真模型(附完整代码)

本文详细介绍了如何使用Matlab从零搭建弹道导弹六自由度仿真模型,涵盖仿真环境配置、核心运动方程实现、气动力建模及仿真结果分析。通过完整代码示例,帮助读者掌握弹道导弹六自由度仿真的关键技术,适用于航空航天工程和复杂系统建模领域。

x8y9z0的博客 947

Java中== equals hashcode浅析:

Java中== equals hashcode浅析: 1. '=='是用来比较两个变量(基本类型和对象类型)的值是否相等的, 如果两个变量是基本类型的,那很容易,直接比较值就可以了。如果两个变量是对象类型的,那么它还是比较值,只是它比较的是这两个对象在栈中的引用(即地址)。 对象是放在堆中的,栈中存放的是对象的引用(地址)。由此可见'=='是对栈中的值进行比较的。如果要比较堆中对象的内容是否相

266

OpenClaw界面操作手册:命令行与交互模式的正确打开方式

"test": {"description": "运行项目的测试套件","prompt": "请执行项目的测试命令,并分析测试结果。如果有失败的测试,请提供修复建议。},"lint": {"description": "运行代码检查","prompt": "请运行代码检查工具,分析所有警告和错误,并提供修复建议。},"doc": {"description": "为当前文件生成文档","prompt": "请为当前打开的文件生成完整的API文档,包括函数说明、参数描述、返回值类型和使用示例。

gaoxiang_120的专栏 3148

Java中== equals hashcode浅析

1. '=='是用来比较两个变量(基本类型和对象类型)的值是否相等的, 如果两个变量是基本类型的,那很容易,直接比较值就可以了。如果两个变量是对象类型的,那么它还是比较值,只是它比较的是这两个对象在栈中的引用(即地址)。 对象是放在堆中的,栈中存放的是对象的引用(地址)。由此可见'=='是对栈中的值进行比较的。如果要比较堆中对象的内容是否相同,那么就要重写equals方法了。 2. Objec...

断了的弦 157

跨境电商产品信息抓取:使用Python爬虫进行市场分析

跨境电商平台是指为不同国家和地区的买卖双方提供在线交易服务的电子商务平台。亚马逊(Amazon):全球最大的电商平台之一,提供丰富的商品种类和全球配送服务。eBay:全球知名的在线拍卖和购物网站,支持个人和企业卖家。速卖通(AliExpress):阿里巴巴旗下的跨境电商平台,主要面向全球消费者提供中国制造的商品。Wish:以移动端为主的跨境电商平台,主打低价商品和个性化推荐。这些平台上的商品数据包括商品名称、价格、销量、用户评价、库存等信息,对于市场分析具有重要价值。

2201_76125261的博客 1233

基于ESP32的智能无线广播系统开发博客

通过本项目的开发,我们成功地实现了基于ESP32的智能无线广播系统。该系统不仅具备传统广播的功能,还实现了通过Wi-Fi无线传输音频、实时广播和智能控制等多种先进功能。未来,随着技术的进一步发展,我们还可以扩展更多功能,如智能推荐广播内容、支持语音识别和控制等。希望本项目能够为嵌入式开发人员提供一些思路和参考,帮助大家在实际开发中更好地应用ESP32平台,开发出更加智能和实用的无线广播系统。

2201_76125393的博客 423

Java equals() 、hashCode()浅析

equals()equals()作用equals() 的作用是 用来判断两个对象是否相等。 equals() 定义在JDK的Object.java中,通过判断两个对象的地址是否相等(即,是否是同一个对象)来区分它们是否相等,源码如下:public boolean equals(Object obj) { return (this == obj); }Object.java中定义了equal

wmingstar 382

基于RK3588调试WiFi模块AIC8800

本文介绍了在RK3588平台上移植AIC8800 WiFi模块驱动的过程。开发环境基于Linux 6.1内核和Buildroot文件系统。驱动移植步骤包括:将驱动包放入SDK指定目录、修改Makefile、编译内核、放置固件文件、手动加载驱动模块等。文章还分析了两种常见异常情况:无法识别模块(检查USB信号线路和供电)和偶发断连(检查硬件连接和调整PHY寄存器)。成功加载后可通过ifconfig看到wlan0节点。

qq_45147279的博客 667

浅析hashcode和equals

前言: hashCode是jdk根据对象的地址 或者 字符串或者数字 算出来的int类型的数值。 1. jdk源代码 ——不同类中的hashcode方法   1:Object类的hashCode().返回对象的内存地址,由于每个对象的内存地址都不一样,所以哈希码也不一样。      public native int hashCode();这就是Object...

weixin_30618985的博客 111

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

从源码开始浅析Java中的==、equals以及hashCode

== == 比较的是对象的存储地址是否相同 String a = "abc"; String b = "abc"; String c = new String("abc"); a == b,返回 true a == c,返回 false 在 Java 中用 new 创建的对象是存放在堆内存中,而 “abc” 却是存放在常量池中,所以 “abc” 与 new String(“abc”) 的地...

李益 281

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

浅析Java中equals()方法和hashCode方法

今天去面试,总觉得自己什么都懂了,应该问题不大,当被问到“未重写的equals()方法和hashCode()方法里面的内容是什么?为什么在重写equals()方法的同时需要重写hashCode()方法?”时,说实话,一脸懵逼啊!!! 一、equals()方法 1、什么时候应该覆盖Object.equals()方法? 原生的equals方法: public boolean equal

隔壁老王的专栏 2873

Java笔记-浅析equals()和hashCode()

浅析equals()和hashCode() equals() Object类中定义的equals() public boolean equals(Object obj) { return (this == obj); } 因为==是比较地址,所以这个方法只有在比较同一对象的时候才会返回true,当使用自定义的类的对象时,需要重写equals()方法。 hashCode() public native int hashCode(); hashCode()方法用于计算hash值,返回

b183385676的博客 536

浅析hashCode()和equals()关系

散列码是由对象的实例域产生的一个整数。准确来说,不同的数据域的对象将产生不同的散列码。 hashCode()返回对象的散列码。 Object类中的hashCode方法: public native int hashCode(); 说明是一个本地方法,它的实现是根据本地机器相关的。和抽象方法类似,如果自定义类,就要负责实现这个类的hashCode方法。但是自己实现的hashCode方法要

Roc的博客 611

[Java] Object方法浅析(一): equals与hashCode

摘要 equals描述的是一种等价关系,不仅仅是引用相等 equals重载需要满足自反性、对称性与传递性 任何实例equals(null)需返回false,且多次调用equals返回值不变 hashCode返回对象的哈希值,多次调用hashCode返回值不变 hashCode不一定与内存地址相关 hashCode会发生碰撞 hashCode与equals密切相关 equals返回true的两个实例

倔强的兔子 448

浅析Java 中 hashCode() 函数和 equals() 函数的一些坑

默认情况下,java.lang.Object 类提供了两个非常重要的函数:equals() 和 hashCode(),当你需要对两个对象进行比较时,就会用到这两个方法。尤其是在大型项目中,多个类之间的需要交互时,这两个方法显得更加重要。在这篇文章中,我们将探讨这两个函数之间的关系,他们默认的实现方式,以及什么情况下开发者必须重载这两个方法。 JDK 中的定义以及默认的实现方式 equals(Ob...

supermouse的博客 362

浅析Java语言Object中的equals、hashcode和clone方法

欢迎跳转到本文原文链接 Backend_Notes Object 类是 Java 中所有类的超类,在 Java 中每个类都是由它扩展来的,只有基本类型(primitive types)不是对象,剩下的引用类型都是对象,包括对象数组或者基本类型数组。 Object obj = new int[10] // ok Object 方法概览: public final native Class<?> getClass(); public native int hashCode(); public b

EJoft的博客 507

Java中== equals hashcode浅析[转]

1. '=='是用来比较两个变量(基本类型和对象类型)的值是否相等的, 如果两个变量是基本类型的,那很容易,直接比较值就可以了。如果两个变量是对象类型的,那么它还是比较值,只是它比较的是这两个对象在栈中的引用(即地址)。 对象是放在堆中的,栈中存放的是对象的引用(地址)。由此可见'=='是对栈中的值进行比较的。如果要比较堆中对象的内容是否相同,那么就要重写equals方法了。 2. Object类...

weixin_34258782的博客 74

浅析hashcode和equals和“==”

“==”比较的是基本数据类型  指向的是该值在栈内存中的地址 “.equals()"比较的是变量,指向的是变量的值 hashcode()是在散列集合中用到,这样的散列集合包括hashset,hashmap,hashtable 当需要往hashmap中存入新值的时候,先调用hashcode()方法,得到对应的hashcode的值,在hashcode中会有一个table保存已存的对象的hashc

梦想氧吧 292

浅析HashSet中equals()与hashCode()方法的重写

我是初学者,文章中有什么不对的地方请大家指出。 大家都知道,集合是一种容器,生活中容器就是用来装东西的,那么在计算机语言中的容器就是用来装数据的。在生活中,我们有各式各样的容器,不同容器有不同的优缺点。比如可以用篮子来装馒头,也可以用塑料袋装馒头。用篮子来装呢比较干净,如果盖上布就能保温,而用塑料袋既便宜又轻便,大家买馒头时,由卖家提供。在Java类库中提供了很...

chenjinbo0000的专栏 1187

浅析重不重写hashcode和equals对于HashSet添加元素的影响

一,重写hashcode和equals的数据结构 通俗来说,hashcode决定了新天街的元素挂在数组那个位置,equals比较当前索引下两个内容是否相等,相等新添加的不成功,决定了能不能加。 二,重不重写hashcode和equals对于HashSet添加元素的影响(可否添加重复元素) 实验一:不重写hashcode的equals import java.util...

aikui8441的博客 310
上一篇: Android多线程
下一篇: BAT大厂Android面试题Java部分问题和答案整理(一)
ApiPlayer
博客等级 码龄12年 34粉丝 17原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值