当前位置: 首页 > 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方法

http://www.xdnf.cn/news/445429.html

相关文章:

  • ElasticSearch重启之后shard未分配问题的解决
  • Rocky Linux 9.5 基于kubeadm部署k8s
  • 3天云南旅游规划
  • Kafka 消费者组进度监控方法解析
  • 【SSL部署与优化​】​​TLS 1.3的核心改进与性能优化​​
  • Java构造器封装继承重写多态
  • Doris
  • Kotlin 中 infix 关键字的原理和使用场景
  • A2DP、HFP、AVRCP分别是什么
  • STL,智能指针和线程安全自选锁读者写者问题
  • 蓝桥杯13届国B 完全日期
  • 【vue】生命周期钩子使用
  • 【行为型之访问者模式】游戏开发实战——Unity灵活数据操作与跨系统交互的架构秘诀
  • 关于Python 实现接口安全防护:限流、熔断降级与认证授权的深度实践
  • 2024年业绩增速大幅回退,泸州老窖未能“重回前三”
  • 使用Rust开发的智能助手系统,支持多模型、知识库和MCP
  • Go 语言 sqlx 库使用:对 MySQL 增删改查
  • Spring Boot requestBody postman
  • 人机环境体系的自主决策与机器系统的自主决策不同
  • 第二章:CSS秘典 · 色彩与布局的力量
  • 时源芯微| KY键盘接口静电浪涌防护方案
  • 【免杀】C2免杀技术(三)shellcode加密
  • ​Android学习总结之handler中源码解析和场景回答
  • scikit-learn在无监督学习算法的应用
  • 【愚公系列】《Manus极简入门》038-数字孪生设计师:“虚实映射师”
  • kaggle薅羊毛
  • 计算机操作系统(七)详细讲解进程的组成与特性,状态与转换
  • ESP32WIFI工具加透传
  • 生命之舞:创建,终止与等待,Linux进程控制的交响乐章
  • Jmeter元件 CSV Data Set Config详解