JAVA的一些便捷性方法(Object)

在IDEA中,如何查看JDK的源码?

CTRL + B;

常用方法:

1.equals()

 booleanequals(Object obj)
          指示其他某个对象是否与此对象“相等”。

与 == 的比较:

==,即可判断基本类型,也可判断引用类型

equals();默认判断引用类型,子类往往重写该方法,用于判断内容是否相等 

 

package com.hspedu.extend_.exercise.object;public class EqualsExercise01 {public static void main(String[] args) {Person person1 = new Person("jack", 10, '男');Person person2 = new Person("jack", 10, '男');System.out.println(person1.equals(person2));//false  --> true}
}class Person{private String name;private int age;private char gender;//重写object的equals方法去判断值@Overridepublic boolean equals(Object obj) {//判断如果比较的是同一对象,直接返回trueif (this == obj) return true;//类型判断if(obj instanceof Person) {//类型转化(因为要取得obj的各个属性)Person p = (Person)obj;return this.name.equals(p.name) && this.age == p.age && this.gender == p.gender;}return false;}public Person(String name, int age, char gender) {this.name = name;this.age = age;this.gender = gender;}}

练习一下:

package com.hspedu.extend_.exercise.object;public class EqualsExercise02 {public static void main(String[] args) {String s1 = new String("as");String s2 = new String("as");System.out.println(s1.equals(s2)); //true,String类中,equals被重写了System.out.println(s1 == s2); //false,不是同一个对象int it = 65;float fl =65.0f;System.out.println(it == fl); //true,基本类型判断的是值char ch1 = 'A';System.out.println(it == ch1);//true,字符本质上是整数//System.out.println("hello" == new java.sql.Date());//无关系导致报错}
}

2.hashCode()

inthashCode()
          返回该对象的哈希码值。

这个方法的主要目的是为了在使用哈希表的情况下提高查找效率。

哈希表是一种数据结构,它使用哈希函数将键映射到存储桶中。在哈希表中查找键的过程是通过键的哈希值来直接访问存储桶的,这比线性搜索数组或链表等数据结构要快得多。

hashCode() 方法的作用就是计算对象的哈希码,这个哈希码可以用来在哈希表中定位该对象的存储桶。如果两个对象相等(即 equals() 方法返回 true),那么它们的哈希码必须相等。但是,不同的对象可能会产生相同的哈希码,这就是所谓的哈希冲突。

默认情况下,hashCode() 方法的实现是根据对象的内存地址计算出来的,所以对于不同的对象,它们的哈希码通常是不同的。但是,如果你想让两个实际上相等的对象在哈希表中占据同一个位置(即让它们的哈希码相同),那么你可以重写 hashCode() 方法。

例如,对于一个 Person 类,你可能希望根据人的姓名和年龄来重写 hashCode() 方法,而不是根据内存地址。这样做可以提高查找效率,因为如果你在哈希表中查找特定姓名和年龄的人,你只需要比较哈希码就可以了,而不需要比较每个对象的实际内容。

总结:

1)提高具有哈希结构的容器的效率!
2) 两个引用,如果指向的是同一个对象,则哈希值肯定是一样的!

3) 两个引用,如果指向的是不同对象,则哈希值是不一样的
4) 哈希值主要根据地址号来的!,不能完全将哈希值等价于地址。
5) 后面在集合,中hashCode如果需要的话,也会重写

 3.toString()

StringtoString()
          返回该对象的字符串表示。

 注意点和代码一起写了。

package com.hspedu.extend_.exercise.toString;public class ToString {//Object的toString源码//功能为 默认返回:全类名 + @ + 哈希值的十六进制  --> 重写//public String toString() {//return getClass().getName() + "@" + Integer.toHexString(hashCode());//},public static void main(String[] args) {Monster monster = new Monster("小妖怪", "巡山的", 1000);//重写前:com.hspedu.extend_.exercise.toString.Monster@1b6d3586System.out.println(monster.toString());//重写后Monster{name='小妖怪', job='巡山的', sal=1000.0}//当直接输出一个对象后,toString 会默认调用System.out.println(monster);//结果:Monster{name='小妖怪', job='巡山的', sal=1000.0}}}class Monster {private String name;private String job;private double sal;public Monster(String name, String job, double sal) {this.name = name;this.job = job;this.sal = sal;}//重写toString方法,输出对象属性@Overridepublic String toString() {return "Monster{" +"name='" + name + '\'' +", job='" + job + '\'' +", sal=" + sal +'}';}
}

 4.finalize()

protected  voidfinalize()
          当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

finalize() 是Java中的一种特殊方法,它在垃圾收集器决定回收对象之前被调用。这个方法是在Java的 Object 类中定义的,所有的类都从 Object 类中继承了这个方法。

finalize() 方法的主要目的是在进行垃圾回收之前,允许程序员执行一些特定的清理操作,如关闭文件或释放系统资源。这个方法的调用是由Java的垃圾收集器自动管理的,你无法直接调用它。

然而,使用 finalize() 方法应该谨慎。首先,这个方法不能保证一定会被调用,因为Java的垃圾收集器无法保证何时运行。其次,如果在程序中依赖 finalize() 方法进行资源清理,那么当程序在多线程环境中运行时,可能会出现资源竞争的问题。此外,如果在 finalize() 方法中出现异常,那么可能会阻止其他资源的正确释放。

因此,尽管 finalize() 方法在某些情况下可能有用,但通常建议使用其他方法来管理资源,例如使用try-with-resources语句来自动关闭资源,或者使用Java的 AutoCloseable 接口和 Closeable 接口来提供更好的资源管理。

package com.hspedu.extend_.exercise;public class Finalize {public static void main(String[] args) {Car car = new Car("宝马");car = null;//默认调用finalize,可以重写自己加业务逻辑System.gc();//主动调用垃圾回收器System.out.println("退出");//退出//销毁汽车 宝马}
}class Car {private String name;public Car(String name) {this.name = name;}@Overrideprotected void finalize() throws Throwable {//super.finalize();System.out.println("销毁汽车 " + name);  //涉及垃圾回收机制}
}

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

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

相关文章

SAE-J1939协议入门解析

文章目录 前言一、SAE J1939物理层二、SAE J1939数据链路层1、帧结构1.1、帧起始(SOF)1.2、优先级(P)1.3、扩展数据页EDP(R)1.4、数据页(DP)1.5、替换远程请求Substitute Remote Request &#…

JavaScript解构数组

还记得之前我们是如何读取到数组里面的元素的么? const arr [2, 3, 4]; const a arr[0]; const b arr[1]; const c arr[2];然后通过这个方式去读取数组中的数据; 现在我们可以使用解构赋值的方法去实现 const [x, y, z] arr; console.log(x, y, …

基于视觉传感器的自主扫雷机器人设计与实现

摘要: 在当今的世界安全形势下,扫雷小车的出现可以减少各国人员在扫雷过程中的人员伤亡,扫雷小车实用性能强更适合在军事化领域或者是民用领域上应用。让它具有光明的发展前景。针对这一情况,本毕业设计就对自主扫雷小车进行研究…

Windows系统如何远程控制Realme手机?

realme使用的是realme UI系统。realme UI是realme研发的操作系统;realme UI 1.0基于安卓10系统,realme UI 2.0基于安卓11系统,realme UI 3.0基于安卓12系统。 对于安卓4.0及以上系统的手机,都可以通过软件AirDroid实现远程控制。 …

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步?

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步? 文章目录 【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步?一、简介软件特色演示: 二、使用免费群晖虚拟机搭建群晖Synology Drive服务,实现局域网同步1 安…

抖音自动评论助手,开发流程与需要到的技术和代码分享

先来看实操成果,↑↑需要的同学可看我名字↖↖↖↖↖,或评论888无偿分享 一、引言 随着互联网的快速发展,短视频平台已成为人们日常生活的重要组成部分。其中,抖音作为一款深受用户喜爱的短视频平台,拥有庞大的用户群体…

HarmonyOS开发:ArkTs常见数据类型

前言 无论是Android还是iOS开发,都提供了多种数据类型用于常见的业务开发,但在ArkTs中,数据类型就大有不同,比如int,float,double,long统一就是number类型,当然了也不存在char类型&…

【超全】C++速查手册:面向对象与继承多态

C速查手册 C 类和对象 面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠…

MySQL递归查询:洞悉数据的层层关联

在处理关系型数据库时,我们经常会遇到这样的情况:某些数据之间存在层级关系,例如目录、组织结构、评论等。在这些场景下,我们需要一种灵活的查询技术来处理这种层级关系。今天我们就来探讨MySQL中的递归查询,体验其独特…

yolov3学习总结

目标检测算法 单阶段:不提取出候选框,直接将整个图像输入模型中,算法直接输出检测结果,端到端 yolo,ssd 端到端,输入图像到网络中,然后从网络中输出图像 二阶段:先从图像中提取出…

紫光展锐Wi-Fi 6成功通过Wi-Fi联盟认证

近日,紫光展锐Wi-Fi 6产品成功通过Wi-Fi联盟 (简称“WFA”) Qualified Solution 认证,并支持Wi-Fi 6 Release 2,标志着紫光展锐自研Wi-Fi 6 IP技术已经成熟,在互操作性、安全性和一系列应用专有协议方面达到了国际行业标准。 WFA是…

自定义 element DatePicker组件指令 使选择器呈现为只读状态,用户无法直接编辑,但可以查看和选择日期

1.问题 现实中遇到列表的搜索条件使用DatePicker 组件进行开始结束时间筛选,但是手动修改input中的值,导致请求参数异常。比如讲clearable设置为false之后还是能手动清空输入框中的值。虽然组件提供了readonly 属性,但是也会让日期选择也无法…

【Flink进阶】-- Flink kubernetes operator 快速入门与实战

1、课程目录 2、课程链接 https://edu.csdn.net/course/detail/38831

4天肝出一个数据应用,可能吗?| StartDT Hackathon

以「基于SimbaOS Kernel的应用创新」为主题,2023年秋季StartDT Hackathon近日圆满收官。 本季黑客马拉松不仅有多次蝉联冠军的算法团队参战,有过去惜败的队伍卷土重来,还吸引到了制造、政企、泛零售等行业线开发者“攻擂”,携丰富…

uniapp + electron 打包项目

参考文献 1、控制台安装electron和electron打包工具electron-packager npm install electron -g npm install electron-packager -g2、manifest.json修改 运行的基础路径修改为:./ 不然打包出来会出现白屏,读取不到,因为打包出来的h5默认加…

【JavaEE】线程安全与线程状态

作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…

配电房综合监控系统

配电房综合监控系统是一种集成了实时监控、数据采集、远程控制等多功能的系统,用于对配电房进行全方位的监测和管理。 力安科技配电室综合监控系统依托电易云-智慧电力物联网,实现配电室环境监测、有害气体监测、安防监控、采暖通风、门禁、灯光、风机、…

进阶C语言-字符函数和字符串函数

字符函数和字符串函数 🎈1.函数介绍🔎1.1strlen函数🔭1.1.1strlen函数的模拟实现📖1.计数器法📖2.递归法📖3.指针-指针 🔎1.2strcpy函数🔭1.2.1strcpy函数的模拟实现 🔎1…

Linux系统编程 day07 信号

Linux系统编程 day07 信号 1. 信号的介绍以及信号的机制2. 信号相关函数2.1 signal2.2 kill2.3 abort和raise2.4 alarm2.5 setitimer 3. 信号集4. 信号捕捉函数6. SIGCHLD信号7. SIGUSR1与SIGUSR2 1. 信号的介绍以及信号的机制 信号是信息的载体,在Linux/Unix环境下…

如何有效的进行 E2E

一、前言 本文作者介绍了什么是E2E测试以及E2E测试测什么,并从对于被测系统、测试用例、测试自动化工具、测试者四个方面的要求,介绍了如何保证E2E测试有效性,干货满满,值得学习。 二、什么是E2E测试 相信每一个对自动化测试感…