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

【Java基础面试题016】JavaObject类中有什么主要方法,作用是什么?

equals()

作用:用于比较两个对象是否相等。默认实现比较对象的内存地址,即判断两个引用是否指向同一个对象

使用:通常会重写此方法来比较对象的内容

hashCode()

作用:返回对象的哈希值,用整数表示对象。

使用:如果重写了equals()方法,则通常也需要重写hashCode()方法,以保证相等的对象具有相同的哈希值

hashCode()默认实现是基于对象的内存地址生成哈希值,如果两个不同的对象,通过equals比较发现内容完全一样,可是内存地址不同,那么他们的哈希值也不同,这不符合"逻辑原则"

逻辑原则: 

  • 如果对象的 equals() 方法返回 true,那么这两个对象的 hashCode() 方法必须返回相同的值
  • 如果两个对象的 equals() 方法返回 false,则它们的 hashCode() 不必不同,但最好尽量不同,以提高性能
  • hashCode() 方法应一致性:在对象的生命周期内,如果对象的某些信息没有改变,则多次调用该对象的 hashCode() 方法应该返回相同的结果。

下面的例子中,将内存地址生成哈希值,改成用内容生成哈希值,然后equals比较也从比较内存地址,改成比较内容,所以这俩一般会一起重写

public class ObjectTest {String name;int age;public ObjectTest(String name, int age) {this.name = name;this.age = age;}@Overridepublic boolean equals(Object obj) {if (this == obj) return true; // 同一引用返回trueif (obj == null || this.getClass() != obj.getClass()) return false; // 空引用或者类型不匹配返回falseObjectTest objectTest = (ObjectTest) obj;return this.age == objectTest.age && Objects.equals(this.name, objectTest.name);}@Overridepublic int hashCode() {return Objects.hash(name, age); // 使用 Objects 工具类生成哈希码}public static void main(String[] args) {ObjectTest p1 = new ObjectTest("黄小桃", 18);ObjectTest p2 = new ObjectTest("王心妍", 20);ObjectTest p3 = new ObjectTest("黄小桃", 18);System.out.println(p1.equals(p2));System.out.println(p1.equals(p3));System.out.println(p1.hashCode());System.out.println(p2.hashCode());System.out.println(p3.hashCode());System.out.println(p1.hashCode() == p2.hashCode());System.out.println(p1.hashCode() == p3.hashCode());}
}

toString()

作用:用字符串表示对象。默认实现是返回对象的全限定类名加上哈希值的十六进制表示

使用:用来更清楚的描述对象

getClass()

作用:返回对象的运行时类(Class对象)。此方法是Object类中的final方法,不能被重写

使用:可以用来获取对象的类信息,常用于反射操作

notify()

作用:唤醒一个处于等待状态的线程。需要在同步代码块或者同步方法中调用

使用:用于在多线程环境中的线程通信

notifyAll()

作用:唤醒其他处于等待状态的所有线程。需要在同步代码块或通过方法调用

使用:用于处理多线程之间的通信协作

wait()

作用:使线程处于无限等待状态,直到其他线程调用notify()或者notifyAll()方法唤醒。需要在同步代码块或通过方法调用

使用:用于线程间的通信,线程会等待直到被唤醒或超时

wait(long timeout,int nanos)

作用:使线程处于计时等待状态(休眠状态),直到指定的时间到期或被唤醒

使用:用于实现更精细的等待控制,允许指定等待时间,甚至精确到纳秒

clone()

作用:创建并返回当前对象的一个副本。默认实现是进行浅拷贝

使用:通常会重写此方法实现深拷贝,以确保克隆对象的完整性

finalize()

作用:在垃圾回收器确定不存在对该对象的更多引用时调用,用于进行资源释放等清理工作

使用:不建议使用,因为它依赖于垃圾回收器的实现,可能会导致不确定的性能问题。推荐使用try-with-resources和AutoCloseable接口进行资源管理

相关文章:

【Java基础面试题016】JavaObject类中有什么主要方法,作用是什么?

equals() 作用:用于比较两个对象是否相等。默认实现比较对象的内存地址,即判断两个引用是否指向同一个对象 使用:通常会重写此方法来比较对象的内容 hashCode() 作用:返回对象的哈希值,用整数表示对象。 使用&…...

实践环境-docker安装mysql8.0.40步骤

一、docker安装mysql 8.0.40版本 1、检索镜像版本 docker search mysql:8.0.40 NAME DESCRIPTION STARS OFFICIAL mysql MySQL is a widely used, open-source relation… …...

边缘智能创新应用大赛获奖作品系列一:智能边缘计算✖软硬件一体化,开启全场景效能革命新征程

边缘智能技术快速迭代,并与行业深度融合。它正重塑产业格局,催生新产品、新体验,带动终端需求增长。为促进边缘智能技术的进步与发展,拓展开发者的思路与能力,挖掘边缘智能应用的创新与潜能,高通技术公司联…...

决策树的生成与剪枝

决策树的生成与剪枝 决策树的生成生成决策树的过程决策树的生成算法 决策树的剪枝决策树的损失函数决策树的剪枝算法 代码 决策树的生成 生成决策树的过程 为了方便分析描述,我们对上节课中的训练样本进行编号,每个样本加一个ID值,如图所示…...

蓝桥杯算法训练 黑色星期五

题目描述 有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形&am…...

MySQL存储引擎-存储结构

Innodb存储结构 Buffer Pool(缓冲池):BP以Page页为单位,页默认大小16K,BP的底层采用链表数据结构管理Page。在InnoDB访问表记录和索引时会在Page页中缓存,以后使用可以减少磁盘IO操作,提升效率。 ○ Page根据状态可以分…...

理解torch函数bmm

基本信息 功能描述 torch.bmm 是 PyTorch 中的一个函数,用于执行批量矩阵乘法(Batch Matrix Multiplication)。它适用于处理一批矩阵的乘法操作,特别适合于深度学习任务中的场景,比如卷积神经网络中的某些层。 参数…...

2024 年的科技趋势

2024 年在科技领域有着诸多重大进展与突破。从人工智能、量子计算到基因组医学、可再生能源以及新兴技术重塑了众多行业。随着元宇宙等趋势的兴起以及太空探索取得的进步,未来在接下来的岁月里有望继续取得进展与突破。让我们来探讨一下定义 2024 年的一些关键趋势&…...

win服务器的架设、windows server 2012 R2 系统的下载与安装使用

文章目录 windows server 2012 R2 系统的下载与安装使用1 windows server 2012 的下载2 打开 VMware 虚拟机软件(1)新建虚拟机(2)设置虚拟机(3)打开虚拟机 windows server 2012(4)进…...

leetcode45.跳跃游戏II

标签:动态规划 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处:返回到达 nums[n - 1] 的最小跳跃次数。…...

边缘智能创新应用大赛获奖作品系列三:边缘智能强力驱动,机器人天团花式整活赋能千行百业

边缘智能技术快速迭代,并与行业深度融合。它正重塑产业格局,催生新产品、新体验,带动终端需求增长。为促进边缘智能技术的进步与发展,拓展开发者的思路与能力,挖掘边缘智能应用的创新与潜能,高通技术公司联…...

基于语义的NLP任务去重:大语言模型应用与实践

引言 在自然语言处理(NLP)任务中,数据质量是模型性能的关键因素之一。重复或冗余的数据会导致模型过度拟合或浪费计算资源,特别是在大语言模型(如 BERT、GPT 系列等)训练和推理阶段。传统的基于字符匹配的…...

使用阿里云Certbot-DNS-Aliyun插件自动获取并更新免费SSL泛域名(通配符)证书

进入nginx docker,一般是Alpine Linux系统 1. 依次执行命令: sudo docker-compose exec nginx bashapk updateapk add certbot apk add --no-cache python3 python3-dev build-baseapk add python3 py3-pippip3 install --upgrade pippip3 install certbot-dns-ali…...

Node.js安装配置+Vue环境配置+创建一个VUE项目

目录 安装Node.js搭建VUE环境 安装Node.js 下载 测试是否安装成功 在目录下新建两个文件夹 管理员打开cmd npm config set prefix "D:\Software\nodejs\node_global" npm config set cache "D:\Software\nodejs\node_cache"将默认的 C 盘下【 AppData\…...

“TA”说|表数据备份还原:SQLark 百灵连接助力项目部署验收

💬 南飞雁|应用开发工程师 有些重要项目的部署验收,会在生产环境完成,验收完成后,又需要把这部分数据清空。这时就需要对数据表进行备份和还原,虽然可以通过命令直接实现,但是有一些操作门槛&am…...

【FFmpeg】解封装 ① ( 封装与解封装流程 | 解封装函数简介 | 查找码流标号和码流参数信息 | 使用 MediaInfo 分析视频文件 )

文章目录 一、解封装1、封装与解封装流程2、解封装 常用函数 二、解封装函数简介1、avformat_alloc_context 函数2、avformat_free_context 函数3、avformat_open_input 函数4、avformat_close_input 函数5、avformat_find_stream_info 函数6、av_read_frame 函数7、avformat_s…...

Spring Boot 集成 MyBatis 全面讲解

Spring Boot 集成 MyBatis 全面讲解 MyBatis 是一款优秀的持久层框架,与 Spring Boot 集成后可以大大简化开发流程。本文将全面讲解如何在 Spring Boot 中集成 MyBatis,包括环境配置、基础操作、高级功能和最佳实践。 一、MyBatis 简介 1. SqlSession …...

C语言小练习-打印字母倒三角

编写一个程序&#xff0c;在用户输入某个大写字母后&#xff0c;产生一个金字塔图案。 #include <stdio.h>int main(int argc,char *argv[]) {char ch; loop:printf("请输入大写字母&#xff01;\n");scanf("%c",&ch);getchar();if(ch < A ||…...

Linux -- 线程控制相关的函数

目录 pthread_create -- 创建线程 参数 返回值 代码 -- 不传 args&#xff1a; 编译时带 -lpthread 运行结果 为什么输出混杂&#xff1f; 如何证明两个线程属于同一个进程&#xff1f; 如何证明是两个执行流&#xff1f; 什么是LWP&#xff1f; 代码 -- 传 args&a…...

基于quasar,只选择年度与月份的组件

为什么要做 quasar是个基于vue的强大的UI开发库&#xff0c;它提供了非常多的组件&#xff0c;比如日期选择。但是有些时候只需要选择到月份就可以了&#xff0c;quasar中没有&#xff0c;所以自己动手写了一个。因为对界面编程我不熟悉&#xff0c;所以&#xff0c;如果你有更…...

FanControl深度指南:智能散热系统的架构解析与实战优化

FanControl深度指南&#xff1a;智能散热系统的架构解析与实战优化 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

告别手输!用Shell脚本自动化你的GROMACS伞形采样全流程(附赠配置文件)

告别手输&#xff01;用Shell脚本自动化你的GROMACS伞形采样全流程&#xff08;附赠配置文件&#xff09; 在计算化学领域&#xff0c;GROMACS作为分子动力学模拟的利器&#xff0c;其强大的功能背后往往伴随着繁琐的命令行操作。特别是进行伞形采样&#xff08;Umbrella Sampl…...

如何通过GitHub配置Resume简历:无需代码的终极解决方案

如何通过GitHub配置Resume简历&#xff1a;无需代码的终极解决方案 【免费下载链接】resume &#x1f680; 在线简历生成器 项目地址: https://gitcode.com/gh_mirrors/resu/resume Resume是一款功能强大的在线简历生成器&#xff0c;让你无需编写代码即可轻松创建专业简…...

改进的樽海鞘群算法在光伏MPPT中的应用探索

改进的樽海鞘群算法 光伏mppt 在原来的基础上引入了将反向学习的思想融入到领导者的更新机制&#xff0c;在搜索最优值的过程中&#xff0c;使得算法拥有更好的全局开发能力和局部开发能力。 追随者更新公式则根据适应度就行了改进&#xff0c;新的位置会更加偏向于适应度较好的…...

网安实验干货每日分享(Weevely配置使用)

网安实验干货每日分享&#xff08;Weevely配置使用&#xff09;-1031 渗透测试环境搭建与工具使用-Weevely配置使用 实验目的 熟悉Webshell管理工具Weevely的配置使用。 实验环境 操作机&#xff1a;Kali2018-TS &#xff08;1&#xff09;操作系统&#xff1a;Kali Linu…...

告别上位机!纯FPGA实现exFAT文件系统,让你的高速数据直接存成标准文件

纯FPGA实现exFAT文件系统&#xff1a;硬件工程师的高速存储革命 在高速数据采集领域&#xff0c;从雷达信号处理到卫星通信&#xff0c;工程师们长期面临一个核心痛点&#xff1a;如何将海量原始数据高效、可靠地转换为标准文件格式。传统方案依赖上位机或嵌入式处理器进行文件…...

AI 焦虑别乱投!3 个问题秒懂要不要养「虾」

作者 | 张辉清 责编 | 梦依丹出品 | 程序人生&#xff08;ID&#xff1a;coder_life&#xff09;当下 AI 热度居高不下&#xff0c;企业该如何抉择&#xff1f;是大举投入布局&#xff0c;还是保持观望&#xff1f;我们借以下三个问题来展开思考。AI 当下处在什么阶段&#xf…...

seo推广如何策划

SEO推广如何策划&#xff1a;全面指南 在当今数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;推广已成为企业提升网站流量、增加品牌曝光的关键手段。如何有效地策划一套适合自己业务的SEO推广方案却不是件容易的事。本文将从SEO推广的基础概念、问题分析、原…...

从开题到答辩,AI全程辅助是一种怎样的体验?

2026年&#xff0c;毕业论文的写作方式已经发生了根本性变化。从开题到答辩&#xff0c;AI工具深度嵌入每一个环节&#xff0c;但这届毕业生也逐渐认清一个事实&#xff1a;AI是副驾驶&#xff0c;你才是驾驶员-1。以下是基于2026届毕业生真实经历的论文全程实录。 一、开题阶段…...

L-SHADE算法实战:如何用线性种群缩减提升优化性能(附Python代码)

L-SHADE算法实战&#xff1a;如何用线性种群缩减提升优化性能&#xff08;附Python代码&#xff09; 在优化算法的世界里&#xff0c;差分进化&#xff08;Differential Evolution, DE&#xff09;一直以其简单高效著称。但传统DE算法在面对高维复杂问题时&#xff0c;常常陷入…...