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

【Java初学基础】⭐Object()顶级父类与它的重要方法equals()

object类常见方法

/*** native 方法,用于返回当前运行时对象的 Class 对象,使用了 final 关键字修饰,故不允许子类重写。*/
public final native Class<?> getClass()
/*** native 方法,用于返回对象的哈希码,主要使用在哈希表中,比如 JDK 中的HashMap。*/
public native int hashCode()
/*** 用于比较 2 个对象的内存地址是否相等,String 类对该方法进行了重写以用于比较字符串的值是否相等。*/
public boolean equals(Object obj)
/*** native 方法,用于创建并返回当前对象的一份拷贝。*/
protected native Object clone() throws CloneNotSupportedException
/*** 返回类的名字实例的哈希码的 16 进制的字符串。建议 Object 所有的子类都重写这个方法。*/
public String toString()
/*** native 方法,并且不能重写。唤醒一个在此对象监视器上等待的线程(监视器相当于就是锁的概念)。如果有多个线程在等待只会任意唤醒一个。*/
public final native void notify()
/*** native 方法,并且不能重写。跟 notify 一样,唯一的区别就是会唤醒在此对象监视器上等待的所有线程,而不是一个线程。*/
public final native void notifyAll()
/*** native方法,并且不能重写。暂停线程的执行。注意:sleep 方法没有释放锁,而 wait 方法释放了锁 ,timeout 是等待时间。*/
public final native void wait(long timeout) throws InterruptedException
/*** 多了 nanos 参数,这个参数表示额外时间(以纳秒为单位,范围是 0-999999)。 所以超时的时间还需要加上 nanos 纳秒。。*/
public final void wait(long timeout, int nanos) throws InterruptedException
/*** 跟之前的2个wait方法一样,只不过该方法一直等待,没有超时时间这个概念*/
public final void wait() throws InterruptedException
/*** 实例被垃圾回收器回收的时候触发的操作*/
protected void finalize() throws Throwable { }

解读:

  • 被final修饰的类表示不可改变,因为所有的类都属于object类的子类,所以所有类都不能重写被final修饰的方法。
  • 在Java中,native是一个方法修饰符关键字,用于表示该方法的实现不是用Java编写的,而是用其他语言(如C或C++)编写的本地代码。这些方法通过Java本地接口(JNI)与Java虚拟机交互

Java中的值传递

  • 基本数据类型传递:修改方法内的基本类型参数不会影响原始值。

  • 引用数据类型传递:修改方法内的引用类型参数(例如数组或对象)会影响原始对象,因为副本和原始引用指向同一个对象。但是,如果尝试改变引用本身(即让副本引用另一个对象),则不会影响原始引用。对于引用类型,传递的是引用的副本(内存地址的副本)简单说:拷贝了钥匙,但开的还是同一把锁。 但正是因为传递的是内存地址的副本,再次对引用对象赋值时却不会改变引用本身。

==与equals()方法

  • 对于基本数据类型来说,== 比较的是值。
  • 对于引用数据类型来说,== 比较的是对象的内存地址。

因为 Java 只有值传递,所以,对于 == 来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。

object类的equals方法

public boolean equals(Object obj) {return (this == obj);
}
  • 没有重写equals方法时,equals方法就是==

重写后的equals方法

String 中的 equals 方法是被重写过的,因为 Objectequals 方法是比较的对象的内存地址,而 Stringequals 方法比较的是对象的值

当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String 对象。

public boolean equals(Object anObject) {if (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;}}return false;
}

解读:

  1. 先比较地址if (this == anObject) → 如果是同一个对象,直接返回true (这一步是优化)

  2. 检查类型if (anObject instanceof String) → 如果不是String类型,直接返回false

  3. 比较长度if (n == anotherString.value.length) → 长度不同直接返回false

  4. 逐字符比较while循环逐个比较字符,有任何不同就返回false

  5. 全部相同:所有字符都相同,返回true

小结:

本篇博客主要介绍了object类和它的重要方法,同时介绍了Java中的值传递,进而引出equals方法,在后面解读源码时,我们还会讲一讲它和hashcode()的难解难分。希望能带给你启发!


文章转载自:

http://LeZipQys.tzjqm.cn
http://wMZaOitz.tzjqm.cn
http://EeT8EYbK.tzjqm.cn
http://IJTQbeyn.tzjqm.cn
http://3QY9FxLX.tzjqm.cn
http://QUOshUFk.tzjqm.cn
http://0d2x4W5V.tzjqm.cn
http://x1xkMHzi.tzjqm.cn
http://82qPF7R3.tzjqm.cn
http://uarekpVs.tzjqm.cn
http://4IOLkpr0.tzjqm.cn
http://R6pJ9gwS.tzjqm.cn
http://HeqqnVwE.tzjqm.cn
http://kTzGzmRX.tzjqm.cn
http://DSM2hDq6.tzjqm.cn
http://lMLBUtDf.tzjqm.cn
http://WfmMzd1h.tzjqm.cn
http://JKB2ueEU.tzjqm.cn
http://lnvGekpI.tzjqm.cn
http://hGhfIID2.tzjqm.cn
http://n7niYoui.tzjqm.cn
http://Xnrlct0c.tzjqm.cn
http://ytxyLvo2.tzjqm.cn
http://uhuJ4NL3.tzjqm.cn
http://iyRX0sPm.tzjqm.cn
http://H3bFxKxk.tzjqm.cn
http://EDqvqY6B.tzjqm.cn
http://SVWEHzKX.tzjqm.cn
http://3cYq4G6t.tzjqm.cn
http://sLsbw0qO.tzjqm.cn
http://www.dtcms.com/a/386868.html

相关文章:

  • C语言初尝试——洛谷
  • Kaleidoscope for Mac:Mac 平台文件与图像差异对比的终极工具
  • LeetCode 刷题【80. 删除有序数组中的重复项 II】
  • 淘宝扭蛋机小程序系统开发:引领电商娱乐化潮流
  • 【车载audio开发】【基础概念2】【Usage、ContentType、Flags、SessionId之间的关系】
  • 【Day 52 】Linux-Jenkins
  • 向内核社区提交补丁
  • 【Java-常用类】
  • 在线教程丨ACL机器翻译大赛30个语种摘冠,腾讯Hunyuan-MT-7B支持33种语言翻译
  • 006 Rust基本数据类型
  • docker配置代理加速
  • 基于MATLAB的视频动态目标跟踪检测实现方案
  • AirPods Pro 3正式发布:全方位升级​
  • PyTorch生成式人工智能(29)——基于Transformer生成音乐
  • 《如龙8外传》共五章:漂流记、老人与海、金银岛等!
  • NVIDIA DOCA与BlueField DPU理解与学习
  • 蜜罐--攻防、护网的强大助力
  • OpenStack 学习笔记
  • 2025年09月16日Github流行趋势
  • git永久存储凭证(可以不用经常输入git密钥)
  • 豆包对高可用系统建设的理解
  • nginx.org 官方仓库安装与配置 NGINX
  • 数据驱动的核心基石:概率分布全家桶的技术实践与方法论思考
  • 贪心算法应用:抗干扰信道分配问题详解
  • 深度搜索 DeepSearch GLM-4.5-flash 实现
  • 基础分割模型U-Net
  • LeetCode:8.无重复字符的最长字串
  • 卷积神经网络搭建实战(一)——torch云端的MNIST手写数字识别(全解一)
  • 实验四 Cache 3种不同的地址映射机制(仿真)
  • 北航计算机保研机试题+解答