首页 > 编程语言 >Java复制

Java复制

时间:2023-07-28 10:22:34浏览次数:34  
标签:Java name 对象 clone 复制 引用 拷贝

将一个对象的引用复制给另外一个对象,一共有三种方式。第一种是直接赋值,第二种方式是浅拷贝,

第三种是深拷贝。所以大家知道了哈,这三种概念都是为了拷贝对象。

直接赋值复制

直接赋值。在Java中,A a1 = a2,我们需要理解的是这实际上复制的是引用,也就是说a1和a2指向的

是同一个对象。因此,当a1变化的时候,a2里面的成员变量也会跟着变化。

浅复制(复制引用但不复制引用的对象)

创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,那么对该字段

执行复制;如果该字段是引用类型的话,则复制引用但不复制引用的对象。

因此,原始对象及其副本引用同一个对象。

 1 class Resume implements Cloneable{
 2     public Object clone() {
 3         try {
 4             return (Resume)super.clone();
 5         } catch (Exception e) {
 6             e.printStackTrace();
 7             return null;
 8         }
 9     }
10 } 

深复制(复制对象和其应用对象)

深拷贝不仅复制对象本身,而且复制对象包含的引用指向的所有对象。

 1 class Student implements Cloneable {
 2     String name;
 3     int age;
 4     Professor p;
 5     Student(String name, int age, Professor p) {
 6         this.name = name;
 7         this.age = age;
 8         this.p = p;
 9     }
10     public Object clone() {
11         Student o = null;
12         try {
13             o = (Student) super.clone();
14         } catch (CloneNotSupportedException e) {
15             System.out.println(e.toString());
16         }
17         o.p = (Professor) p.clone();
18         return o;
19     }
20 }

序列化(深clone一种实现)

在Java语言里深复制一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的一个拷贝)

写到一个流里,再从流里读出来,便可以重建对象。

标签:Java,name,对象,clone,复制,引用,拷贝
From: https://www.cnblogs.com/zhncnblogs/p/17586888.html

相关文章

  • java项目更改jdk版本出现问题
    这里demo中的java版本出了点问题,将jdk17改为jdk11打开项目结构设置Project中的SDK和Languagelevel为jdk11。一、java:错误:不支持发行版本17 打开settings中的JavaCompiler修改module中项目的java版本二、java:错误:无效的源发行版:17 打开项目结构,找到下图界面修改J......
  • java面试题带链接
    下面是在网下下载的,不知道哪来的了,发出来方便查看一、Java基础1.String类为什么是final的。https://www.zhihu.com/question/313455922.HashMap的源码,实现原理,底层结构。get(key)方法时获取key的hash值,计算hash&(n-1)得到在链表数组中的位置first=tab[hash&(n-1)],先判断first的k......
  • 要实现Java中的Excel导入导出功能,可以使用Apache POI库。
    下面是一个简单的示例:导入Excel文件:importorg.apache.poi.ss.usermodel.*;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;importjava.io.FileInputStream;importjava.io.IOException;publicclassExcelImportExample{publicstaticvoidmain(String[]args){......
  • Java 大后端各种架构图汇总
    1.java类加载器架构2.JVM架构3.Java技术体系4.线程运行架构5.Java体系(编译与运行)结构6.JMS技术架构7.JMX技术架构8.Spring架构9.Hibernate架构10.ibatis架构11.Struts2架构12.Struts1架构13.JBPM14.EJB技术架......
  • SHA1签名算法,JAVA和C#
    java:publicstaticvoidmain(String[]args)throwsNoSuchAlgorithmException{Stringtoken="31a4a1aa-cffc-4aca-9ef6-0497edf7fbed";Stringnonce="Rzem0rlz19e6GZuZuFKyDzaxiS4baaqn8uvxVnntXKS";Stringtimestamp="1646......
  • JavaAPI
    Scanner类该类是文本扫描类构造方法//创建一个扫描输入内容的扫描器Scannersc=newScanner(Sytem.in);//扫描文本内容的扫描器Filefile=newFile("C:\\Users\\Administrator\\Desktop\\test.txt");Scannersc=newScanner(file);类中方法//从键盘中读取内容int......
  • JavaScript中this关键字详解(二)
    使用注意点避免多层this由于this的指向是不确定的,所以切勿在函数中包含多层的this。varo={f1:function(){console.log(this);//objectvarf2=function(){console.log(this);//window}();}}​o.f1()//Object//Window上面代码......
  • JavaScript中this关键字详解(一)
    涵义this关键字是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。this可以用在构造函数之中,表示实例对象。除此之外,this还可以用在别的场合。但不管是什么场合,this都有一个共同点:它总是返回一个对象。简单说,this就是属性或方法“当前”所在的对象......
  • Java8 函数式编程stream流
    开篇介绍Java8中新增的特性旨在帮助程序员写出更好的代码,其中对核心类库的改进是很关键的一部分,也是本章的主要内容。对核心类库的改进主要包括集合类的API和新引入的流(Stream),流使程序员得以站在更高的抽象层次上对集合进行操作。下面将介绍stream流的用法。1.初始环境准备......
  • Java 如何对比两个文件夹缺少的文件
    Java如何对比两个文件夹缺少的文件在开发过程中,我们有时需要对比两个文件夹中的文件,以找出其中的差异。其中,一个常见的需求是找出第一个文件夹中缺少的文件。这篇文章将介绍如何使用Java程序实现这个功能。思路对于这个问题,我们可以分别遍历两个文件夹中的文件,并将它们的文件名......