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

Java 根类 Object

java.lang.Object 是 Java 类层次结构中的根类,所有类都直接或间接实现了此类的方法。

Object API

源码

package java.lang;public class Object {private static native void registerNatives();static {registerNatives();}public final native Class<?> getClass();public native int hashCode();public boolean equals(Object obj) {return (this == obj);}protected native Object clone() throws CloneNotSupportedException;public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}public final native void notify();public final native void notifyAll();public final native void wait(long timeout) throws InterruptedException;public final void wait(long timeout, int nanos) throws InterruptedException {if (timeout < 0) {throw new IllegalArgumentException("timeout value is negative");}if (nanos < 0 || nanos > 999999) {throw new IllegalArgumentException("nanosecond timeout value out of range");}if (nanos > 0) {timeout++;}wait(timeout);}public final void wait() throws InterruptedException {wait(0);}protected void finalize() throws Throwable { }
}

toString

返回一个对象的字符串表示。Object 中 toString 方法返回的是 类名 + “@” + 当前对象的哈希值,以此表示当前对象,建议所有子类重写该方法。

public String toString() {return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
}

equals

判断其它对象是否等于当前对象,Object 中默认使用 == 判断,比较的是地址。

equals 方法在非空对象引用上实现相等关系:

  • 自反性:对于任何非空引用 x,x.equals(x) 都应返回 true
  • 对称性:对于任何非空引用 x 和 y,当且仅当 x.equals(y) 返回 true 时,y.equals(x) 也返回 true。
  • 传递性:对于任何非空引用 x、y 和 z,如果 x.equals(y) 返回 true,y.equals(z) 返回 true,那么 x.equals(z) 也返回 true
  • 一致性:对于任何非空引用 x 和 y,多次调用 x.equals(y) 都应返回 true,只要对象上 equals 信息没有修改
  • 对于任何非空引用 x,x.equals(null) 都应返回 false
public boolean equals(Object obj) {return this == var1;
}

String 类的 equals 重写:

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;
}

一般需要同时重写 equals 和 hashCode 方法,确保 equals 相等时 hashCode 相等。

如果 equals 判断两个对象相等,则 hashCode 相等;equals 不相等,hashCode 可能相等;hashCode 相等,equals 可能不相等。

hashCode

public native int hashCode();

String 类的 hashCode 重写:

private final char value[];private int hash; // Default to 0public int hashCode() {int h = hash;if (h == 0 && value.length > 0) {char val[] = value;for (int i = 0; i < value.length; i++) {h = 31 * h + val[i];}hash = h;}return h;
}

clone

clone 方法返回当前对象的副本对象。

protected native Object clone() throws CloneNotSupportedException;

Object 将 clone 作为一个本地方法来实现。当执行 clone 的时候,会检查调用对象的类(或者父类)是否实现了java.lang.Cloneable接口( Object 类不实现 Cloneable )。如果没有实现这个接口,将会抛出一个检查异常 — java.lang.CloneNotSupportedException,如果实现了这个接口,会创建一个新的对象,并将原来对象的内容复制到新对象,最后返回这个新对象的引用。

浅克隆与深克隆

Object 类的 clone 方法是浅克隆,对于字符串以外的引用数据类型克隆的是地址。

  • 浅克隆,对于引用类型,克隆的是地址
public class Human implements Cloneable {public String name;public int age;public Human mother;@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}
}
public static void main(String[] args) throws CloneNotSupportedException {Human mother = new Human();mother.name = "gm";mother.age = 50;Human human = new Human();human.name = "kh";human.age = 25;human.mother = mother;Human copyMan = (Human) human.clone();System.out.println(human == copyMan); // falseSystem.out.println(human.name == copyMan.name); // trueSystem.out.println(human.mother == copyMan.mother); // true}
  • 深克隆,克隆对象是创建新的对象,然后复制对象内容。
public class Human implements Cloneable {public String name;public int age;public Human mother;@Overridepublic Object clone() throws CloneNotSupportedException {Human human = (Human) super.clone();if(mother != null) {human.mother = (Human) mother.clone();}return human;}
}
public static void main(String[] args) throws CloneNotSupportedException {Human mother = new Human();mother.name = "gm";mother.age = 50;Human human = new Human();human.name = "kh";human.age = 25;human.mother = mother;Human copyMan = (Human) human.clone();System.out.println(human == copyMan); // falseSystem.out.println(human.name == copyMan.name); // trueSystem.out.println(human.mother == copyMan.mother); // false
}

getClass

返回对象的运行时类。

public final native Class<?> getClass();

finalize

当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用。

protected void finalize() throws Throwable {}

相关文章:

Java 根类 Object

java.lang.Object 是 Java 类层次结构中的根类&#xff0c;所有类都直接或间接实现了此类的方法。 Object API 源码 package java.lang;public class Object {private static native void registerNatives();static {registerNatives();}public final native Class<?>…...

04_Apache Pulsar的可视化监控管理、Apache Pulsar的可视化监控部署

1.4.Apache Pulsar的可视化监控管理 1.4.1.Apache Pulsar的可视化监控部署 1.4.Apache Pulsar的可视化监控管理 1.4.1.Apache Pulsar的可视化监控部署 第一步&#xff1a;下载Pulsar-Manager https://archive.apache.org/dist/pulsar/pulsar-manager/pulsar-manager-0.2.0/…...

【算法】期末复盘,酒店住宿问题——勿向思想僵化前进

文章目录前言题目描述卡在哪里代码&#xff08;C&#xff09;前言 省流&#xff1a;一个人也可以住双人间&#xff0c;如果便宜的话。 害&#xff01;尚正值青春年华&#xff0c;黄金岁月&#xff0c;小脑瓜子就已经不灵光咯。好在我在考试的最后一分钟还是成功通过了这题&am…...

Java中的Comparator 与 Comparable详解

Comparator VS Comparable1. Comparator1.1 对一维数组进行排序1.2 对二维数组进行排序1.3 对对象数组进行排序2. Comparable3. 二者区别1. Comparator 通过源码发现Comparator是一个接口。 根据compare方法中的注释可以发现方法返回三种类型的值&#xff0c;正数、零、负数&a…...

计算机科学导论笔记(二)

三、数据存储 3.1 数据类型 计算机行业中使用术语“多媒体”来定义包含数字、文本、音频、图像和视频的信息。 位&#xff1a;bit&#xff0c;binary digit的缩写&#xff0c;是存储在计算机中的最小单位&#xff0c;它是0或1. 位模式&#xff1a;为了表示数据的不同类型&a…...

GEC6818开发板JPG图像显示,科大讯飞离线语音识别包Linux_aitalk_exp1227_1398d7c6运行demo程序,开发板实现录音

GEC6818开发板JPG图像显示 | 开发板实现录音一.GEC6818开发板JPG图像显示1.jpg图片特性2.如何解压缩jpg图片1.对jpegsrc.v8c.tar.gz进行arm移植2.进入~/jpeg-8c对jpeg库进行配置3.编译4.安装&#xff0c;将动态库存放到 /home/gec/armJPegLib5.清空编译记录6.自己查看下 /home/…...

如何判断树莓派通过GPIO与5G模块成功连接?

如果想要判断自己是否成功连接了树莓派与5G模块&#xff0c;可以通过以下方式进行判断&#xff1a; 查看设备连接状态&#xff1a;可以通过在树莓派终端中执行lsusb命令来查看USB设备的连接状态&#xff0c;如果5G模块被识别到&#xff0c;则会显示相关的设备信息。如果提示lsu…...

Java——包装类和List及ArrayList

目录 包装类&#xff08;Wrapped Class) 包装类的使用---装箱和拆箱 自动装箱和自动拆箱 Integer的易错题 javap反编译工具 List接口的使用 方法 ArrayList 使用 打印 区别 扩容机制 ArrayList练习 字符集合 杨辉三角 ​编辑 包装类&#xff08;Wrapped Class) Object 引用可…...

matlab - 程序流程控制、函数文件、特殊函数、调试与优化

学习视频MATLAB代码的两种执行方式&#xff1a;命令行、程序执行。1.程序流程控制1.1.m文件matlab中m文件分为两种&#xff1a;脚本文件&函数文件。脚本文件&#xff1a;实际上是一个命令的集合&#xff0c;可认为是命令行的改良版&#xff0c;方便我们去编写命令函数文件&…...

Toponogov 比较定理及其应用

1. Toponogov 比较定理的背景来源 Victor Andreevich Toponogov&#xff08;1930-2004&#xff09; 是苏联数学家&#xff0c;Toponogov 比较定理是他的博士论文题目&#xff0c;在1958年答辩。他证明这个定理是为了用于证明截面曲率假设下的分裂定理和最大直径定理&#xff0…...

力扣sql简单篇练习(二十二)

力扣sql简单篇练习(二十二) 1 上月播放的儿童适宜电影 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # Write your MySQL query statement belowSELECT titleFROM ContentWHERE kids_contentY AND content_typeMoviesAND c…...

【开源硬件】STM32F030R8T6系统板

【开源硬件】STM32F030R8T6系统板✅STM32F030R8T6系统板兼容极海APM32F030R8T6 &#x1f530;支持stm32cubemx工程配置成STM32F030R8T6生成的MDK工程&#xff0c;经过Keil编译后可以直接使用ST-Link v2烧录器上传到极海APM32F030R8T6芯片当中&#xff0c;完全做到平替使用&…...

ES之DSL查询文档基础查询

分类 query查询分类 总体规律就是逻辑性的&#xff0c;从外层的你干嘛&#xff0c;到下一层的查询类型&#xff0c;再到下一层的查询字段&#xff08;如果需要的话&#xff09;和然后是查询内容 查询所有 语法 get /索引库名/_serarch {"query":{"查询条件…...

数据结构与算法之堆排序

目录堆排序概述代码实现时间复杂度堆排序概述 堆排序&#xff08;Heap Sort&#xff09;是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构&#xff0c;每个结点的值都大于或等于其左右孩子结点的值&#xff0c;称为大顶堆&#xff1b;或者每个结点…...

Vue3 中的模板语法

目录前言一、什么是模板语法&#xff1f;二、内容渲染指令1. v-text2. {{ }} 插值表达式3. v-html三、双向绑定指令1. v-model2. v-model的修饰符四、属性绑定指令1. 动态绑定多个属性值2. 绑定class和style属性五、条件渲染指令1. v-if、v-else-if、v-else2. v-show3. v-if和v…...

Redis十大类型——Hash常见操作

Redis十大类型——Hash常见操作命令操作简列存放及获取获取健值对长度元素查找列出健值对对数字进行操作赋值hsetnx很明显咯它也是以健值对方式存在的&#xff0c;只不过value也就是值&#xff0c;在这里也变成了一组简直对。 &#x1f34a;个&#x1f330;&#xff1a; 想必多…...

Python采集本地二手房,一键知晓上万房源信息

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 所以今天教大家用Python来采集本地房源数据&#xff0c;帮助大家筛选好房。 话不多说&#xff0c;让我们开始愉快的旅程吧~ 更多精彩内容、资源皆可点击文章下方名片获取此处跳转 本文涉及知识点 采集基本流程 requests 发送…...

Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法(亲测有效)

关于/lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28’ not found出现报错&#xff0c;建议不要使用源码包去编译并升级。在下文有分享一个使用官方的Debian软件包去升级使用的方法。仅供参考&#xff01; 环境 # uname -a Linux Ubuntu 5.4.0-144-generic #161~18.04.…...

Java文档搜索引擎总结

Java文档搜索引擎总结项目介绍项目使用的技术栈前端页面展示后端逻辑部分索引部分搜索模块部分Web模块部分项目介绍 Java文档搜索引擎项目是一个SSM项目&#xff0c;该项目的前端界面部分是由搜索页面和展示页面组成&#xff0c;后端部分索引模块&#xff08;ScanAnalysis、in…...

Linux内核学习笔记——页表的那些事。

目录页表什么时候创建内核页表变化什么时候更新到用户页表源码分析常见问题解答问题一&#xff1a;页表到底是保存在内核空间中还是用户空间中&#xff1f;问题2&#xff1a;页表访问&#xff0c;软件是不是会频繁陷入内核&#xff1f;问题3&#xff1a;内存申请&#xff0c;软…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...