当前位置: 首页 > news >正文

【Java学习笔记】equals方法

equals方法


Object类方法一览表

方法说明
protected Object clone()创建并返回此对象的一个副本。
boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
protected void finalize()当垃圾回收器确定不再有对该对象的更多引用时,由对象的垃圾回收器调用此方法。
Class<?> getClass()返回此 Object 的运行时类。
int hashCode()返回该对象的哈希码值。
void notify()唤醒在此对象监视器上等待的单个线程。
void notifyAll()唤醒在此对象监视器上等待的所有线程。
String toString()返回该对象的字符串表示。
void wait()在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
void wait(long timeout)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。
void wait(long timeout, int nanos)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过某个线程中断当前线程,或超过指定的时间量前,导致当前线程等待。

介绍

源码探求

(1)Object类中的equals方法源码

public boolean equals(Object obj) {return (this == obj);}

(2)String类中的equals方法源码

public boolean equals(Object anObject) {// 如果是同一个对象,返回trueif (this == anObject) {return true;}// 判断是不是该对象if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;//如果长度相同,逐个字符比较是否相同if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}// 不是该对象,返回falsereturn false;
}

体会重写equals方法

要求:判断两个 Person 对象的内容是否相等,如果两个 Person 对象的各个属性值都一样,则返回 true,反之 false

public class prr {public static void main(String[] args) {overideequals o1 = new overideequals(18,"jack");overideequals o2 = new overideequals(18,"jack");System.out.println(o1.equals(o2));}
}
class overideequals{int age;String name;public overideequals(){}public overideequals(int age, String name) {this.age = age;this.name = name;}public boolean equals(Object obj) {// 如果是同一个对象就返回trueif(this == obj){return true;}// 判断是否是该对象if(obj instanceof overideequals){overideequals o = (overideequals)obj;return this.age == o.age && this.name.equals(o.name);}// 如果不是该类,返回falsereturn false;}
}//返回结果
true

代码解析

equals方法是Object的子类,根据继承关系的方法调用机制和方法重写原则,优先在子类中寻找是否有equals方法,如果没有就调用父类的equals方法

本案例中对equals方法进行重写,即覆盖了父类的equals方法

相关文章:

  • 什么是 Shadow Testing?
  • 聊聊JetCache的缓存构建
  • 【Python】超类与父类
  • 关于数据湖和数据仓的一些概念
  • 抢跑「中央计算+区域控制」市场,芯驰科技高端智控MCU“芯”升级
  • AcroForm JavaScript Promise 对象应用示例: 异步加载PDF文件
  • JS,ES,TS三者什么区别
  • python如何设置excel单元格边框样式
  • 云图库和黑马点评的项目学习经验
  • 数字IC后端设计实现 | 如何自动删除Innovus 中冗余的hold buffer?
  • NAT/代理服务器/内网穿透
  • SpringBoot整合MQTT实战:基于EMQX构建高可靠物联网通信,从零到一实现设备云端双向对话
  • K8S Ingress 实现金丝雀(灰度)发布
  • NVMe简介1
  • FFMPEG 与 mp4
  • FunASR:语音识别与合成一体化,企业级开发实战详解
  • Turborepo + Vite + Next.js + Shadcn Monorepo 项目构建
  • MoonBit正式入驻GitCode!AI时代的编程语言新星,开启高性能开发新纪元
  • 【面试 · 五】CSS个别重点总结
  • 【内网渗透】——S4u2扩展协议提权以及KDC欺骗提权
  • 美国与卡塔尔签署超2435亿美元经济及军事合作协议
  • 昆明警方重拳打击经济领域违法犯罪:去年抓获905名嫌犯
  • 【社论】公平有序竞争,外卖行业才能多赢
  • 第四届长三角国际应急博览会开幕,超3000件前沿装备技术亮相
  • 广东韶关一镇干部冲进交通事故火海救人,获授“见义勇为”奖励万元
  • 朝着解决问题的正确方向迈进——中美经贸高层会谈牵动世界目光