Java的Object类和深拷贝和浅拷贝(面试题)

news2025/2/24 3:35:36

1.java.lang.Object类的说明

  • 1.Object类是所有Java类的根父类

  • 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类

  • 3.Object类中的功能(属性、方法)就具通用性。

  • 属性:无

  • 方法:equals() / toString() / getClass() /hashCode() / clone() / finalize()

    wait() 、 notify()、notifyAll()

    1. Object类只声明了一个空参的构造器

1.拷贝的引入

(1)引用拷贝

创建一个指向对象的引用变量的拷贝。

Teacher teacher = new Teacher("Taylor",26);
Teacher otherteacher = teacher;
System.out.println(teacher);
System.out.println(otherteacher);
结果:
blog.Teacher@355da254
blog.Teacher@355da254
    由输出结果可以看出,它们的地址值是相同的,那么它们肯定是同一个对象。teacher和otherteacher的只是引用而已,他们都指向了一个相同的对象Teacher(Taylor,26)。 这就叫做引用拷贝。

在这里插入图片描述

(2)对象拷贝

创建对象本身的一个副本。

Teacher teacher = new Teacher("Swift",26);
Teacher otherteacher = (Teacher)teacher.clone();
System.out.println(teacher);
System.out.println(otherteacher);

blog.Teacher@355da254
blog.Teacher@4dc63996
    结果分析:由输出结果可以看出,它们的地址是不同的,也就是说创建了新的对象, 而不是把原对象的地址赋给了一个新的引用变量,这就叫做对象拷贝。

在这里插入图片描述
注:深拷贝和浅拷贝都是属于->对象拷贝

2.浅拷贝

浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象

     Student student1 = new Student();
      student1.setName("Dream");
      student1.setAge(18);
      student1.setTeacher(teacher);//student1引用的teacher对象

        Student student2 = (Student) student1.clone();
//student2仅仅复制了student1对象,不复制student1引用的teacher对象

两个引用student1和student2指向不同的两个对象,但是两个引用student1和student2中的两个teacher引用指向的是同一个对象,所以说明是浅拷贝。

对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。"里面的对象“会在原来的对象和它的副本之间共享

在这里插入图片描述

3.深拷贝

简而言之,深拷贝把要复制的对象所引用的对象都复制了一遍。深拷贝相比于浅拷贝速度较慢并且花销较大。

     	Teacher3 t = new Teacher3();
        t.setName("Delacey");
        t.setAge(29);
//深拷贝后:Teacher作为2个对象的引用对象 输出name
		t.setName("Jam"); 
//只有student1指向对象的引用Teacher对象改了  因为student1和2指向两个对象的引用对象Teacher并不是同一个地址了。

在这里插入图片描述

两种方式实现深拷贝:

1:不常用

 	    Teacher3 t = new Teacher3();
        t.setName("Taylor");
        t.setAge(28);

		Student3 student1 = new Student3();
        student1.setName("Dream");
        student1.setAge(18);
        student1.setTeacher(teacher);

        Student3 student2 = (Student3) student1.clone();
---------------
      @Override
    public Object clone() throws CloneNotSupportedException {
        // 浅复制时:
        // Object object = super.clone();
        // return object;

        // 改为深复制:
        Student3 student = (Student3) super.clone();
        // 本来是浅复制,现在将Teacher对象复制一份并重新set进来
        student.setTeacher((Teacher2) student.getTeacher().clone());
        return student;
    }

2:利用序列化实现深拷贝

    	Teacher3 t = new Teacher3();
        t.setName("Taylor");
        t.setAge(28);	

		Student3 s1 = new Student3();
        s1.setAge(20);
        s1.setName("blank space");
        s1.setTeacher(t);

        Student3 s2 = (Student3) s1.deepClone();

------------------------------------------------
   public Object deepClone() throws Exception {
        // 序列化
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);

        oos.writeObject(this);

        // 反序列化
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bis);

        return ois.readObject();
    }

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

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

相关文章

图片识别表格的方法有哪些?试试这几个好用的表格识别软件

随着数字化时代的到来,越来越多的公司和个人需要处理大量的表格数据。这些数据往往以图片的格式存在,而手动输入这些数据非常耗费时间和精力。因此,图片识别表格软件正在成为一个不可或缺的工具。那么,图片识别表格软件哪个好呢&a…

SAP从入门到放弃系列之CRP-Part1

从我学习CRP(Capacity Requirement planning)过程,应该能分三部分来总结。这篇就总结一下我学到的基本配置和概念。 温馨提示 :又臭又长的系统配置内容放在了最后的章节。本文分三个部分,工作中心数据和工艺路线创建,生产订单能力…

【Tomcat 部署及优化】

目录 一、Tomcat 安装部署1、Tomcat 介绍2、Tomcat 核心组件1、Tomcat 功能组件结构:2、Container 结构分析: 3、Tomcat 请求过程: 二、Tomcat 服务部署1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下2.安装JDK3.设置JDK环…

六、docker安装ngxin部署若依前端

1.第一次安装,不进行挂载数据卷, docker run \ -p 8060:80 \ --name nginx \ --privilegedtrue \ --restartalways \ -d nginx:1.17.82. 将配置信息复制到宿主机本地 # 将容器nginx.conf文件复制到宿主机 docker cp nginx:/etc/nginx/nginx.conf /data…

代码随想录算法训练营第五十天|123.买卖股票的最佳时机III|188.买卖股票的最佳时机IV

LeetCode123.买卖股票的最佳时机III 动态规划五部曲: 1,确定dp数组以及下标的含义: 一天一共就有五个状态, 没有操作 (其实我们也可以不设置这个状态)第一次持有股票第一次不持有股票第二次持有股票第二…

为什么代码签名需要添加时间戳?

如果您是软件发行商或开发人员,那么您就会知道软件的成功通常取决于下载次数,这部分取决于用户对它的信任程度。因此,为了向用户保证并避免在下载或安装时出现不必要的警告消息,您采取了主动步骤,例如使用受信任的代码…

uniapp和springboot微信小程序开发实战:开发环境准备以及技术选型

文章目录 开发工具STSHBuilder X其他工具技术选型前端开发vueelementUI后端springbootmybatisplusJWT和shiro开发工具 STS STS是开发springboot项目的利器,是Eclipse的一个版本,全称是SpringToolSuite STS下载地址 HBuilder X 下载地址

WWDC2023|苹果iOS 17系统更新:可共享AirTag

苹果正在召开的 WWDC 2023 开发者大会上,宣布推出了 iOS 17 系统。包含一些功能上的更新。 共享 AirTag iOS 17 引入了一项备受期待的 AirTag 功能,即与他人共享 AirTag。自推出以来,AirTag 只能由一个人拥有和使用,但在 iOS 17…

如何做架构设计? | 京东云技术团队

也许您对软件设计存在一些疑惑,或者缺乏明确思路,那么本文将非常适合您。 1、设计很重要 我们可以看一下周边的事物,那些好的东西,他们并不会天然存在,都是被设计出来的,因此设计就是创造和改善事物的重要…

基于BP神经网络对MNIST数据集检测识别

基于BP神经网络对MNIST数据集检测识别 1.作者介绍2.基于BP神经网络对MNIST数据集检测识别2.1 BP神经网络介绍2.2 神经元模型2.3 激活函数2.4 BP神经网络基础架构2.5 BP神经网络正向传播反向传播 3.基于BP神经网络对MNIST数据集检测识别实验3.…

三分钟,教你3种前端埋点方式!

目录 前言 埋点方式 基于ajax的埋点上报 介绍 代码实现 缺点 基于img的埋点上报 script及link的缺陷 基于img做埋点上报 基于Navigator.sendBeacon的埋点上报 介绍 作用 补充 例子 优势 总结 常见埋点行为 点击触发埋点 页面停留时间上报埋点 错误监听埋点…

人工电场算法(AEFA)(含MATLAB代码)

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年…

8种Python异常检测算法总结

异常检测是通过数据挖掘方法发现与数据集分布不一致的异常数据,也被称为离群点、异常值检测等等。本文为大家整理了8个常见的Python异常检测算法,希望对大家有所帮助 一、异常检测简介 异常检测是通过数据挖掘方法发现与数据集分布不一致的异常数据&…

Centos7系统部署搭建Kafka集群

kafka集群搭建 一、环境准备1.1 服务器准备1.2 版本信息1.3 启动kafka环境1.3.1 获取kafka1.3.2 启动kafka1.3.2.1 kafka && ZooKeeper1.3.2.2 kafak && KRaft 1.4 创建主题1.5 事件写入主题1.6 事件读取1.7 停止kafka环境 二、搭建 kafka 集群2.1 ZooKeeper 集…

chatgpt赋能python:Python如何读取照片

Python如何读取照片 介绍 Python是一种高级编程语言,其简单易用、可扩展性强等特点,使其在数据分析、机器学习等领域得到了广泛应用。而在图像处理领域,Python同样也有着较为优异的表现。本文将介绍Python读取照片的方法,并探讨…

普通2本,去过字节外包,到现在年薪30W+的测试开发,我的2年转行心酸经历...

个人简介 我是一个普通二本大学机械专业毕业,17年毕业,19年转行,目前做IT行业的软件测试已经有3年多,职位是高级测试工程师,坐标上海… 我想现在我也有一点资格谈论关于转行这个话题;希望你在决定转行之前…

Linux下面安装jdk和tomcat

1、jdk的安装 1、上传jdk到 opt目录下面 2、解压jdk tar -xvf jdk-8u281-linux-x64.tar.gz3、一般把jdk放到/usr/local (软件的安装都是放到usr下面) mv jdk1.8.0_281 /usr/local/4、配置环境变量 找到 /etc/profile 进行编辑修改 export JAVA_HOM…

速下载 | 200页幻灯片图解新版《商用密码管理条例》

国家高度重视商用密码工作。2023年4月14日,国务院常务会议审议通过了《商用密码条例》(以下简称《条例》)修订草案。5月24日中华人民共和国中央人民政府网站正式公开修订后的正式稿全文。本次《条例》在密码法框架下进行了全面修订&#xff0…

面试“我“又踩坑了,高频软件测试面试题,项目经验板块(付答案)...

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

(学习日记)2023.06.07

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…