object类clone、finalize

news2025/2/10 23:50:20

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()比较两个对象的类型+所有属性与属性值
    * */
    @Override
    public boolean equals(Object o) {
        //前提:this代表的是调用本方法对象s1 o代表的是传入的对象s2
        //1.比较的是两个对象的地址值,如果==为true,证明直接就是同一个对象
        //后续就不用比较了,直接返回true
        if (this == o) return true;
        //2.1如果传入的对象是null,说明实际上并没有对象,还是引用类型的默认值
        //2.2如果两个对象获取类型不一致,比如一个是Cat类型,一个是Car类型
        //以上两种情况只要满足任意一种,不符合条件,直接返回false
        if (o == null || getClass() != o.getClass()) return false;
        //3.传入对象的类型是Object,父类无法使用子类的特有属性,所以需要强转
        /*多态:向上造型:把子类型看作是父类型,花木兰替父从军 Animal a = new Cat();
        向下造型:之前转成父类型的子类对象,又想使用子类自己的特有功能了,可以向下转型
                 写法:Cat c = (Cat) a; 比如花木兰打仗完了想用自己的特有功能:化妆*/
        //向下造型:把父类型Object转回子类型Student
        Student 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@4617c264
        System.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;
       }

       @Override
       public String toString() {
           return "User{" +
                   "name='" + name + '\'' +
                   ", age=" + age +
                   '}';
       }
   }

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

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

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

相关文章

HTB-OnlyForYou

HTB-OnlyForYou 信息收集立足johnjohn -> root 信息收集 Designed by BootstrapMade. 在他们的TEAM的常见问答里面发现了一个beta产品。 网站首页可以下载疑似源码的文件。 右上角还有两个功能。 一个是上传图片并调整大小。 上传了文件后会跳转到list,选择…

【CV大模型SAM(Segment-Anything)】如何一键分割图片中所有对象?并对不同分割对象进行保存?

之前的文章【CV大模型SAM(Segment-Anything)】真是太强大了,分割一切的SAM大模型使用方法:可通过不同的提示得到想要的分割目标,中详细介绍了大模型SAM(Segment-Anything)根据不同的提示方式得到不同的目标分割结果。 …

11. 100ASK-V853-PRO开发板 RGB屏测试指南

100ASK-V853-PRO开发板 RGB屏测试指南 硬件要求: 100ASK-V853-PRO开发板七寸RGB屏 软件要求: 固件下载地址:链接:百度网盘 提取码:sp6a 固件位于资料光盘中的10_测试镜像/1.测试七寸RGB屏/v853_linux_100ask_uart0.…

echarts中国地图使用整理

一、echarts中国地图使用案例 1.准备地图数据china.json ; 需要的添加微信&#xff1a;tianma104&#xff0c;我发你 2.引入jquery&#xff0c;引入eachars 库 <script src"http://xx/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script s…

Unity入门5——Camera

一、参数面板 二、参数介绍 1. Clear Flags&#xff1a;清除背景 Skybox&#xff1a;天空盒背景&#xff08;通常用来做 3D 游戏&#xff09; Solid Color&#xff1a;使用 Background 颜色填充&#xff08;通常设置为全黑或全白&#xff0c;2D 使用&#xff09; Depth Only&am…

【ARM AMBA ATB 入门 1 - ATB 总线简介】

文章目录 背景1.1 ATB BUS1.2.1 全局信号1.2.2 数据信号1.2.3 流控信号1.2.4 Trace ID1.2.5 Buffer Flusing 背景 在 AMBA3 中&#xff0c;增加了 Advanced Trace Bus (ATB) 总线作为片上调试的总线接口&#xff0c;为 Debug 和 Trace 提供一种解决方案。第3代总线是2003年发布…

存储快速入门——【1】网络存储主要技术(NAS、SAN、SCSI、CIFS、zone)

存储快速入门——【1】网络存储主要技术 1 NAS简介&#xff08;网络&#xff09; 在20世纪80年代初&#xff0c;英国纽卡斯尔大学布赖恩.兰德尔教授 ( Brian Randell)和同事通过“纽卡斯尔连接”成功示范和开发了在整套UNIX机器上的远程文件访问。继“纽卡斯尔连接”之后&…

Springboot集成Redis常见的报错和解决方案

Springboot集成Redis后运行时常见的报错信息和其解决方案 1. io.lettuce.core.protocol.CommandHandler : null Unexpected exception during request: java.io.IOException: 远程主机强迫关闭了一个现有的连接。报错信息原因分析解决方案 2. io.netty.util.internal.OutOfDire…

Python自动化测试 史上最全的进阶教程

Python自动化测试就是把以前人为测试转化为机器测试的一种过程。自动化测试是一种比手工测试更快获得故障反馈的方法。 随着时代的变革&#xff0c;也许在未来测试这个职位的需求会越来越少甚至消失&#xff0c;但是每一个组织&#xff0c;每一个客户对软件质量的要求是永远不…

剪辑软件生成的mp4素材无法打开的修复方法

专业剪辑软件可以对视频、音频进行各种修改、美化&#xff0c;像adobe的PR等。今天我们来看一个剪辑软件生成的视频无法打开的修复案例&#xff0c;看看遇到这种情况如何处理. 故障文件:273M和1.72G两个文件 故障现象: 剪辑完成后保存到移动硬盘&#xff08;文件系统为exfat…

VALSE 2023 无锡线下参会个人总结 6月10日-1

VALSE2023无锡线下参会个人总结6月10日-1 会场照片6月10日会议日程安排大会主旨报告&#xff1a;高文&#xff1a;特征编码与数字视网膜焦李成&#xff1a;下一代深度学习的思考与若干问题陈熙霖&#xff1a;计算机视觉-从孤立到系统性方法 企业宣讲环节&#xff08;一&#xf…

邓铎:书中自有天地人

邓铎&#xff0c;一个优秀的艺术家&#xff0c;他的书法作品、理论文章自成一派&#xff0c;从书法中咀嚼出人生百味&#xff0c;大千世界&#xff0c;写下了他生命中“六十余载&#xff0c;书中天地人”的执着与坚持。 作为一名优秀的书法家&#xff0c;邓铎的艺术表达具有独…

网安笔记14 firewall

防火墙概述 由软件和硬件组成的系统&#xff0c;它处于安全的网络和不安全的网络之间&#xff0c;根据由系统管理员设置的访问控制规则&#xff0c;对数据流进行过滤 对于内部攻击以及绕过防火墙的连接却无能为力 对数据流如何处理 允许数据流通过拒绝数据流通过&#xff0…

构建工具 Vite、Webpack、Rollup对比

Webpack介绍 热更新方面&#xff1a;webpack支持HMR&#xff0c;但是webpack需要全部重新编译并更新&#xff0c;效率较低 tree-shaking&#xff1a;webpack2开始支持且消除效果不好&#xff0c;但是webpack5有更好的tree-shaking&#xff08;去除未使用代码&#xff09; 分包…

0基础学习VR全景平台篇第43篇:编辑器底部菜单-隐藏场景

大家好&#xff0c;欢迎观看蛙色VR官方系列——后台使用课程&#xff01; 本期为大家带来蛙色VR平台&#xff0c;底部菜单—隐藏场景功能操作。 功能位置示意 一、本功能将用在哪里&#xff1f; 隐藏场景功能&#xff0c;指将选中的场景隐藏&#xff0c;浏览页将不显示隐藏的…

最详细,从0-1性能测试步骤详细,测试老鸟经验总结...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试流程 性…

sandfly-entropyscan:一款功能强大的恶意程序熵扫描工具

关于sandfly-entropyscan sandfly-entropyscan是一款功能强大的熵扫描工具&#xff0c;该工具可以用于检测与恶意软件相关的打包文件或加密二进制文件。除此之外&#xff0c;该工具还支持查找恶意文件和Linux进程相关的安全信息&#xff0c;并提供带有加密哈希的输出结果。 s…

cesium学习(下载,官方案例)

下载cesium源码 可以从官网直接下载&#xff0c;官网下载的是编译好的。链接: https://www.cesium.com/downloads/从github下载源码&#xff0c;方便我们本地调试学习(本文采用这种方式)。链接: https://github.com/CesiumGS/cesium 运行项目 安装依赖 npm i运行 npm run …

八股|ThreadLocal的内存泄露

ThreadLocal是个好用的工具类&#xff0c;但是使用不好是会导致内存泄露的。 内存泄露&#xff1a;之前开辟使用的内存空间&#xff0c;在使用完毕后未释放&#xff0c;结果导致一直占据该内存单元&#xff0c;无法被gc回收&#xff0c;导致该内存单元后续无法被使用&#xff0…

优思学院|质量管理六大思维陷阱【四】:抽样检查是最经济又能保证质量的方法吗?

在质量控制的过程中&#xff0c;一个常见的误解是认为抽样检查是最经济又能保证质量的方法。许多人认为进行百分之百的全数检查既浪费人力又时间不够。因此&#xff0c;他们倾向于采用抽样检查的方法&#xff0c;认为这样既符合经济成本&#xff0c;又能确保产品质量的水准。 …