object类clone、finalize

news/2024/5/20 10:48:25/文章来源:https://blog.csdn.net/weixin_58276266/article/details/131200208

2 什么是API

API(Application Programming Interface,应用程序接口)是一些预先定义的函数。目的是提供应用程序与开发人员基于某软件可以访问的一些功能集,但又无需访问源码或理解内部工作机制的细节.
API是一种通用功能集,有时公司会将API作为其公共开放系统,也就是公司制定自己的系统接口标准,当需要进行系统整合,自定义和程序应用等操作时,公司所有成员都可以通过该接口标准调用源代码.

Java api(Java词典)
api网址:https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html

8. Object 类的使用

3.1概念
Object类是所有Java类的祖先,也就是说我们所说的”顶级父类”
它存在于java.lang.Object,这个包不需要我们手动导包
需要注意的是:每个类都使用Object作为超类.所有对象(包括数组)都实现这个类的方法.
在不明确给出超类的情况下,Java会自动把Object类作为要定义类的超类.

注意:默认所有的类的父类都是object类

请添加图片描述

请添加图片描述

8.2 Object 类的方法

根据 JDK 源代码及 Object 类的 API 文档,Object 类当中包含的方法有 11 个。
这里我们这一节课主要关注其中的 4个:

重点:equals、tostring
了解:clone、finalize

1、(重点)equals()

= =: 基本类型比较值:只要两个变量的值相等,即为 true。

请添加图片描述

引用类型比较引用(是否指向同一个对象):只有指向同一个对象时,= =才返回 true。

请添加图片描述

用“= =”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本数据类型除外),否则编译出错

equals():所有类都继承了 Object,也就获得了 equals()方法。还可以重写。
只能比较引用类型,Object 类源码中 equals()的作用与“==”相同:比较是否指向同一个对象
格式:obj1.equals(obj2)

请添加图片描述

注意⚠️:当用 equals()方法进行比较时,对类 File、String、Date 及包装类来说,是比较类型及内容而不考虑引用的是否是同一个对象,因为底层重写了equals方法,说白了就是说不是使用的object的equals方法;
请添加图片描述

请添加图片描述

equals方法的代码案例

package com.tedu;public class Test1 {public static void main(String[] args) {User user=new User("name",33);User u1=new User("name",33);
/*
查看底层源码的快捷键:Windows:鼠标放上去 + ctrl
* 查看底层的equals方法的源码:其实equals的作用和==是一样的
*在这里equals判断的是这两个对的地址值是否相同
* 我们在这里没有继承object类,但是我们可以使用equals方法
* 说明类底层默认继承object类,在这里equals方法比较的是是否为同一个对象
* */System.out.println(u1.equals(user));String s1=new String("yes");String s2=new String("yes");System.out.println(s1.equals(s2));}}class  User{String name;int age;public User(){}public User(String name, int age) {this.name = name;this.age = age;}}

自定义类的重写equals方法

请添加图片描述
请添加图片描述

  //9.添加重写的equals与hashCode()/*equals()与hashCode()逻辑要保持一致,要重写都重写,要不重写,都不重写* Object默认实现:hashCode()的哈希码值根据地址值生成*               equals()底层使用==比较两个对象的地址值* Student类重写后:hashCode()的哈希码值根据重写后传入的对象的属性生成*                equals()比较两个对象的类型+所有属性与属性值* */@Overridepublic boolean equals(Object o) {//前提:this代表的是调用本方法对象s1 o代表的是传入的对象s2//1.比较的是两个对象的地址值,如果==为true,证明直接就是同一个对象//后续就不用比较了,直接返回trueif (this == o) return true;//2.1如果传入的对象是null,说明实际上并没有对象,还是引用类型的默认值//2.2如果两个对象获取类型不一致,比如一个是Cat类型,一个是Car类型//以上两种情况只要满足任意一种,不符合条件,直接返回falseif (o == null || getClass() != o.getClass()) return false;//3.传入对象的类型是Object,父类无法使用子类的特有属性,所以需要强转/*多态:向上造型:把子类型看作是父类型,花木兰替父从军 Animal a = new Cat();向下造型:之前转成父类型的子类对象,又想使用子类自己的特有功能了,可以向下转型写法:Cat c = (Cat) a; 比如花木兰打仗完了想用自己的特有功能:化妆*///向下造型:把父类型Object转回子类型StudentStudent student = (Student) o;//4.比较的是两个对象的属性与属性值//如果是基本类型,直接比较值,所以用==比较//如果是引用类型,比如String,还需要使用bjects.equals()做比较return age == student.age && Objects.equals(name, student.name);}

重写 equals()方法的原则
– 对称性:如果 x.equals(y)返回是“true”,那么 y.equals(x)也应该返回是“true”。
– 自反性:x.equals(x)必须返回是“true”。
– 传递性:如果 x.equals(y)返回是“true”,而且 y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
– 任何情况下,x.equals(null),永远返回是“false”;x.equals(和 x 不同类型的对象)永远返回是“false”。

面试题:==和 equals 的区别

==可以使用基本数据类型还可以使用在引用数据类型
如果使用在是基本数据类型比较的是基本数据类型和内容是否相同
如果使用在引用数据类型则比较的是地址值是否相同

equals方法只能使用在引用数据类型上
还有一种是自定义类的重写equals方法,主要比较两个对象的属性值是否相等

tostring方法

toString()
本方法用于返回对应对象的字符串表示

请添加图片描述

请添加图片描述
如果我们不想打印对象的地址值,而是打印对象的内容就需要重写tostring方法在这里插入代码片
tostring 方法我们手动写请添加图片描述

package com.tedu;import java.util.Date;public class Test1 {public static void main(String[] args) {User user=new User("name",33);User u1=new User("name",33);/**   com.tedu.User@4617c264下面这两个打印语句结果相同*    都是打印的是对象的地址值* */System.out.println(u1.toString());//com.tedu.User@4617c264System.out.println(u1);String s=new String("这是strig方法");System.out.println(s.toString());Date date=new Date();System.out.println(date.toString());}}class  User{String name;int age;public User(){}public User(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}}

hashCode()
本方法用于返回对应对象的哈希码值
小贴士:哈希码值的得出是通过一种算法,意在让不同的对象具有不同的哈希码值,用于区分不同的对象.但是有时候也存在不同对象哈希码值相同的特殊情况,我们称之为”哈希碰撞”现象

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

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

相关文章

自动驾驶专题介绍 ———— 激光雷达标定

文章目录 介绍激光雷达与激光雷达之间的外参标定激光雷达与摄像头的标定 介绍 激光雷达在感知、定位方面发挥着重要作用。跟摄像头一样,激光雷达也是需要进行内外参数标定的。内参标定是指内部激光发射器坐标系与雷达自身坐标系的转换关系,在出厂之前就已…

【道友避坑】CUB数据集转yolov5格式

写在前面:最近我拿到一个CUB_200_2011鸟类训练模型,但是我想将他转为yolov的格式进行应用。看了些其他博主博客后,发现跳跃性有些强。再此记录转换过程,希望各位道友修得此法后,能有所收获! 一、获取数据集…

为什么年龄越大工作失误越多水平越低能力越差-个人案例

此为内容创作模板,在发布之前请将不必要的内容删除 在日复一日的工作中,我们免不了会产生一些失误,会因此感到沮丧和失望。但如何正确地对待和处理这些失误才是最重要的,它直接影响到我们的工作表现和个人成长。一起来谈谈作为职…

信贷产品的贷前获客营销策略搭建

在竞争激烈的信贷市场中,有效的贷前获客营销策略对于吸引潜在借款人、提高转化率以及保持客户忠诚度至关重要。本文将分享一些关于信贷产品贷前获客营销策略搭建的基本框架和经验分享,希望能对大家有所启发。 1、市场调研和目标客户定义 在制定贷前获客…

使用Unity开发一个游戏类型的区块链 [独立区块链]

ArouseBlockchain [Unity独立区块链] 这是一个学习性质的项目,使用了Unity进行独立区块链游戏的开发。 徽章维护者如何贡献使用许可 项目说明 关于本项目的使用说明 背景安装使用说明 生成器 区块链简述 区块链的基础知识简述 背景 未来趋势 区块链未来趋势的…

【什么是iMessage推送,im群发】苹果推iMessage是苹果公司为其设备用户提供的即时通讯服务

iMessage是苹果公司为其设备用户提供的即时通讯服务,拥有一系列强大的功能和特点。然而,至今为止,苹果并未提供官方的群发部署功能。iMessage主要被设计为点对点的通信工具,即用户可以与一个或多个人进行私密的聊天对话。以下是关…

VMware Workstation 17 的安装

一、简介 VMware Workstation 17.0是一款功能非常强大的虚拟机,可以帮助用户在Windows系统上同时开启多个系统,不仅能在虚拟机上安装上不同的操作系统,比如Mac、Linux以及Windows10/11等,还能与云技术和容器技术(如 D…

SpringCloud Eureka注册服务提供者(七)

这里我们在原来的服务提供者项目 microservice-student-provider-1001 上面直接修改&#xff1a; 首先pom.xml修改&#xff0c;加上eureka客户端依赖&#xff1a; <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>…

1.7C++流插入运算符重载

C流插入运算符重载 在 C 中&#xff0c;流插入运算符&#xff08;<<&#xff09;用于输出数据到流中的运算符&#xff0c;流插入运算符可以被重载&#xff0c;使得程序员可以自定义输出对象的方式。 重载流插入运算符的一般形式如下&#xff1a; 其中&#xff0c;T 是…

运维(SRE)成长之路-第1天 搭建虚拟机(图示)

1.Linux安装前准备 虚拟机&#xff1a;用软件&#xff08;如&#xff1a;vmware,virtualbox等&#xff09;模拟硬件,方便实验的灵活配置 虚拟化软件&#xff0c;建议使用 Vmware Workstation 虚拟硬件配置 CPU&#xff1a;2核或更多 内存&#xff1a;1G以上&#xff0c;推荐2…

天线设计中的磁介质材料 探索可重构潜力

​from&#xff1a;IEEE Antennas & Propagation Magazine (Vol. 61 / No. 1 / Feb. 2019, pp:29-40) -- 文 前 -- 这篇文章针对铁氧体在外置磁场下磁导率发生变化这个特点&#xff0c;探讨铁氧体在可重构天线中的应用。文中对铁氧体材料的选择&#xff0c;磁导率数学模型…

Linux系统的tty架构及UART驱动详解

​一、模块硬件学习 1.1. Uart介绍 通用异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter)&#xff0c;通常称为UART&#xff0c;是一种异步收发传输器&#xff0c;是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。 作为把并…

基于Hexo和Butterfly创建个人技术博客,(5) 使用Hexo的Tags Plugin插件增强博客文章内容和视觉表现力

Hexo官司网查看 这里 注意&#xff1a; Tags语法是Hexo插件提供的&#xff0c;是非标准语言&#xff0c;写文章时要注意以下几点&#xff1a; 用于在文章中快速插入特定的内容&#xff0c;作用等同于其它语言&#xff0c;可理解为一种增强版本的markdown&#xff1b;可混合Mark…

嵌入式软件开发岗位----求职过程记录(基础知识和面经总结)

1、本栏用来记录社招找工作过程中的内容&#xff0c;包括基础知识以及面试问题等&#xff0c;以便于后续个人回顾学习&#xff1b; 暂时只有2023年3月份&#xff0c;第一次社招找工作的过程&#xff1b; 2、个人经历&#xff1a; 研究生期间课题是SLAM在无人机上的应用&#xf…

Elastic 8.8 版引入了全新的 Learned Sparse Encoder 模型,并宣布正式推出合成监测

作者&#xff1a;Brian Bergholm 2023年5月25日 今天&#xff0c;我们非常高兴地宣布 Elastic 8.8 版正式发布。 新增功能 Elastic 企业搜索可帮助开发人员利用 Elasticsearch 实现强大的现代搜索和发现体验。 请在 “Elastic 企业搜索亮点” 博文或 8.8 版发行说明中&#…

MySQL启停要十分钟?

一、问题背景 基础环境&#xff1a; 主机类型&#xff1a;x3850 X6 操作系统&#xff1a;DB:Red Hat Enterprise Linux 9.1 7.8 存储&#xff1a;IBM存储&#xff0c;500GB 内存&#xff1a;64 G CPU型号&#xff1a;E7-4830 v3 2.10GHz CPU核数&#xff1a;32CORE 数据…

png转jpg,直接改后缀?

通过把.png改为.jpg可以改变图片的格式么&#xff1f; 将PNG文件扩展名改为JPEG的扩展名&#xff08;.jpg或.jpeg&#xff09;不会更改图像的格式。它只是更改了文件扩展名&#xff0c;这可能导致一些图像查看器和编辑器无法正确识别和处理该文件。 PNG和JPEG是两种不同的图像文…

RadEx Pro处理电火花数据操作步骤(上)

最近单位采集了很多的电火花测线&#xff0c;同事在使用GeoSuite AllWorks 2022R1处理这些测线的时候&#xff0c;发现二次波对地层辨识和划分干扰比较严重。GeoSuite AllWorks 压制二次波的能力有限&#xff0c;有人推荐我们试一试地震处理软件RadEx Pro。 两个中文文档“RadE…

零基础想转行做python爬虫及数据分析方向的程序员,有哪些书可以推荐?

学习Python语言是一个不错的选择&#xff0c;一方面Python的应用广泛&#xff0c;在大数据、人工智能、Web开发等领域有大量的使用&#xff0c;另一方面Python语言本身比较简单&#xff0c;非常适合初学者。 Python是完全可以自学的&#xff0c;如果英语基础还可以的话&#x…

MySQL(六):基本的SELECT语句

基本的SELECT语句 前言一、SELECT...二、SELECT ... FROM三、列的别名四、去除重复行五、空值参与运算六、着重号七、查询常数八、显示表结构九、过滤数据 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注博主&#…