【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接口进行资源管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/494043.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

左神算法基础巩固--1

文章目录 时间复杂度常数时间的操作时间复杂度的定义时间复杂度的作用剖析递归行为和递归行为时间复杂度的估算 排序选择排序冒泡排序插入排序归并排序小和问题问题描述解题思路 快速排序荷兰国旗问题问题描述 堆排序堆结构大根堆小根堆 桶排序 二分二分搜索 ^的运用不用额外空…

ROS1安装教程

一、环境准备 操作系统:Ubuntu 20.04 LTS 注:为保证系统干净,本文使用Docker进行 演示,如已安装相应的Ubuntu系统请忽略。 Docker安装Ubuntu系统步骤如下: # 拉取镜像 docker pull ubuntu:20.04# 创建容器 docker ru…

秒优科技-供应链管理系统 login/doAction SQL注入漏洞复现

0x01 产品简介 秒优科技提供的供应链管理系统,即秒优SCM服装供应链管理系统,是一款专为服装电商企业设计的全方位解决方案。是集款式研发、订单管理、物料管理、生产管理、工艺管理、收发货管理、账单管理、报表管理于一体的服装电商供应链管理解决方案。它涵盖了从企划到开…

【论文复刻】新型基础设施建设是否促进了绿色技术创新的“量质齐升”—来自国家智慧城市试点的证据(C刊《中国人口·资源与环境》

一、数据来源:住建部、国家知识产权局、中国城市统计年鉴,内含原始数据、处理代码和基准回归 二、数据范围: DID 为了延长政策效应估计的时间区间,将住建部公布的首批国家智慧城市作为处理组,非试点城市作为对照组。将…

【机器学习与数据挖掘实战】案例04:基于K-Means算法的信用卡高风险客户识别

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…

Oracle中间件 SOA之 OSB 12C服务器环境搭建

环境信息 服务器基本信息 如下表,本次安装总共使用1台服务器,具体信息如下: App1服务器 归类 APP服务器 Ip Address 172.xx.30.xx HostName appdev01. xxxxx.com Alias appdev01 OSB1服务器 归类 OSB服务器 Ip Address 172.xx3…

Elasticsearch-分词器详解

什么是分词器 1、分词器介绍 对文本进行分析处理的一种手段,基本处理逻辑为按照预先制定的分词规则,把原始文档分割成若干更小粒度的词项,粒度大小取决于分词器规则。 常用的中文分词器有ik按照切词的粒度粗细又分为:ik_max_word和ik_smart&…

CE之植物大战僵尸植物无冷却

思路:先扫描所有的未知道初始化的值,一般是4字节,然后我们先种植一棵植物再通过CE扫描不断变化的值,等植物冷却结束后再去扫描未变化的值,重复操作。然后找到冷却值,然后通过汇编的方式去编写nop代码&#…

Datawhale AI冬令营——Chat-悟空设计

Chat - 悟空项目介绍 一、项目背景 当前大模型市场竞争激烈,通用大模型众多,但针对特定领域、具有特色风格的垂直领域微调模型仍有较大发展空间。以《西游记》这一高人气影视IP为依托进行微调,能在文化娱乐相关细分市场吸引用户关注&#xf…

微服务分布式(二、注册中心Consul)

首先我们需要安装consul,到官网下载Consul Install | Consul | HashiCorp Developer 在解压的consul目录下 执行启动命令 consul agent -dev 启动服务 -dev表示开发模式 -server表示服务模式 启动后在浏览器访问8500端口http://localhost:8500/可以看到服务管理界面 项目…

Java基于SSM框架的无中介租房系统小程序【附源码、文档】

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

Activiti开启流程实例

开始绘流程图,首先右击鼠标可以看到一下图标,都有相对应的意思 画好一个简易的流程过后,可以看到xml文件中已经有了 右击生成png格式的图片 图片点击后就是一个视图的效果 将流程文件部署 Test public void testDeploy() {//1.创建流程引擎P…

ECharts柱状图-柱图42,附视频讲解与代码下载

引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个柱状图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供…

解锁移动设备管理新技能-RayLink远程控制手机

在这个忙碌的现代社会中,智能手机已经成为我们生活的重要组成部分,它们不再仅仅是通讯工具,而是我们日常生活的核心。随着这种变化,远程控制手机的技术应运而生,为我们开启了一个全新的移动设备管理时代。今天&#xf…

基于DockerCompose搭建Redis主从哨兵模式

linux目录结构 内网配置 哨兵配置文件如下,创建3个哨兵配置文件 # sentinel26379.conf sentinel26380.conf sentinel26381.conf 内容如下 protected-mode no sentinel monitor mymaster redis-master 6379 2 sentinel down-after-milliseconds mymaster 60000 s…

c++--------c++概念

定义与起源 C是一种高级编程语言,它是C语言的扩展。C由Bjarne Stroustrup在20世纪80年代初开发,最初被称为“C with Classes”。其设计目的是在保持C语言高效性的同时,增加面向对象编程(OOP)的特性。例如,…

【优选算法---归并排序衍生题目】剑指offer51---数组中的逆序对、计算右侧小于当前元素的个数、翻转对

一、剑指offer51---数组中的逆序对 题目链接: LCR 170. 交易逆序对的总数 - 力扣(LeetCode) 题目介绍: 在数组中的两个数字,如果前面⼀个数字大于后面的数字,则这两个数字组成⼀个逆序对。输入一个数组&#xff0c…

C++算法第十二天

本篇文章,我们继续学习动态规划 第一题 题目链接 面试题 17.16. 按摩师 - 力扣(LeetCode) 题目解析 代码原理 代码编写 细节问题处理 这里的细节问题就是当n 0时的这种情况 完整源代码 class Solution { public: int massage(vector&…

java全栈day20--Web后端实战(Mybatis基础2)

一、Mybatis基础 1.1辅助配置 配置 SQL 提示。 默认在 mybatis 中编写 SQL 语句是不识别的。可以做如下配置: 现在就有sql提示了 新的问题 产生原因: Idea 和数据库没有建立连接,不识别表信息 解决方式:在 Idea 中配置 MySQL 数…

2023年厦门市第30届小学生C++信息学竞赛复赛上机操作题(三、2023C. 太空旅行(travel))

#include <bits/stdc.h>using namespace std;struct Ship {int u; // 从地球到火星的时间int v; // 从火星到天王星的时间 };// 自定义比较函数 bool cmp(const Ship &a, const Ship &b) {return a.u max(a.v, b.u) b.v < b.u max(b.v, a.u) a.v; }int ma…