【浅析java的浅拷贝和深拷贝】教程文章相关的互联网学习教程文章

java中的深拷贝与浅拷贝

Java中对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢? 1 使用new操作符创建一个对象 2 使用clone方法复制一个对象 那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道...

JavaScript 的 深拷贝和浅拷贝【代码】【图】

深拷贝和浅拷贝都是针对的引用类型,JS中的变量类型分为值类型(基本类型)和引用类型;对值类型进行复制操作会对值进行一份拷贝,而对引用类型赋值,则会对地址进行拷贝,最终两个变量指向同一份数据 一、先来看看JS中的数据类型let x = 1; //number类型 let x = 0.1; //number类型,JS不区分整数值和浮点数值 let x = "hello world"; //由双引号内文本构成字符串 let x = ‘javascript‘; //单引号内文本同样可以构...

JavaScript的深拷贝的实现【代码】

JavaScript的数据类型简单数据类型stringnumberbooleanfunctionnullundefined复杂数据类型StringNumberBooleanFunctionDateArrayRegExpObject各种类型的深复制方式:先来看看简单类型的复制方式://string var s1 = ‘abc‘; var s2 = s1; s2 = ‘ccc‘; console.log(s1);//number var n1 = 12.1; var n2 = n1; n2 = 7410; console.log(n1);//boolean var b1 = true; var b2 = b1; b2 = false; console.log(b1);//null var nu1 = n...

java深拷贝的实现【代码】

在有些业务场景下,我们需要两个完全相同却彼此无关的java对象。比如使用原型模式、多线程编程等。对此,java提供了深拷贝的概念。通过深度拷贝可以从源对象完美复制出一个相同却与源对象彼此独立的目标对象。这里的相同是指两个对象的状态和动作相同,彼此独立是指改变其中一个对象的状态不会影响到另外一个对象。实现深拷贝常用的实现方式有2种:Serializable,Cloneable。 Serializable方式就是通过java对象的序列化和反序...

Java 浅拷贝和深拷贝【代码】【图】

1.前言之前的博文 Java 返回可变引用对象的相关问题中,对于可变变量,有使用 clone()方法,防止破坏封装,还没有较深入的介绍克隆方法,这篇博文将进一步介绍。2.clone()方法protected Object clone() throws CloneNotSupportedException创建并返回此对象的副本。 “复制”的确切含义可能取决于对象的类别。 一般意图是,对于任何对象x ,表达式为: x.clone() != x按照惯例,返回的对象应该通过调用super.clone获得。 如果一个...

Java的深拷贝和浅拷贝【代码】【图】

Java深拷贝和浅拷贝  关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象。可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷贝的原理,对于Java中的所谓值传递或者引用传递将会有更深的理解。1、创建对象的5种方式  ①、通过 new 关键字  这是最常用的一种方式,通过 new 关键字调用类的有参或无参构造方法来创建对象。比如 Object obj = new Object();  ②、通过...

java中的深拷贝和浅拷贝【代码】

1、浅拷贝 对源对象克隆到一个新的对象,源对象的引用类型按值副本传递,基本类型属性仍然引用之前的地址副本,所以对新对象修改引用类型属性时, 源对象也会被修改。 实现步骤: 1)实现cloneable接口 2)重写Object的clone方法2、深拷贝 对源对象克隆到一个新的对象,新对象的基本类型和引用类型都会完整克隆一份新的,对新对象的引用类型修改不会影响到源对象。 实现方式: 1)被克隆类和属性引用类型都实现cloneab...

java对象克隆以及深拷贝和浅拷贝【代码】【图】

java对象克隆以及深拷贝和浅拷贝 1.什么是"克隆"? 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能 会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的。在 Java语言中,用简单的赋值语句是不能满足这种需求的。要满足这种需求虽然有很多途径,但实现clone()方法是其中最简单,也是最高...

java 集合的深拷贝【代码】

ArrayList 、 LinkedList等对象都可以用构造器传参的方式快速完成深拷贝。 如: private List<List<Integer>> res = new ArrayList<>(); private List<Integer> temp = new ArrayList<>(); ... res.add(new ArrayList<Integer>(temp)); //传入需要拷贝的目标集合即可

【java常用类】浅谈深拷贝,浅拷贝。【图】

浅拷贝:拷贝基本类型,引用类型指向与原来的一样 深拷贝:基本类型,引用类型都拷贝一份。 在查找几篇博客之后,之以为懂了深拷贝,浅拷贝,然后还是发现自己对于他们的理解还是出现了问题, 理解1:浅拷贝,深拷贝你调用了几次,就拷贝几次。 比如你调用一次clone方法,那么就拷贝一次,拷贝后就产生了各种的对象属性,不依赖原来的对象了。只是浅拷贝和原来的对象有牵连。 如图所示,浅拷贝会拷贝一个School2对象,只拷贝基本...

Java的浅拷贝与深拷贝【代码】

Java的浅拷贝与深拷贝 Java中,Object基类有clone方法,但是如果要使用该方法,必须在要被Clone的类实现(implements)Cloneable接口,否则会报java.lang.CloneNotSupportedException异常,Cloneable接口是在java.lang中自动被导入的。 如果不重写clone()方法,则在调用clone()方法实现的是浅复制(所有的引用对象保持不变,意思是如果原型里这些对象发生改变会直接影响到复制对象)。重写clone()方法,一般会先调用super.clone()进行...

java list 深拷贝【代码】

/*** 深度复制list对象,先序列化对象,再反序列化对象** @param src 需要复制的对象列表* @return 返回新的对象列表* @throws IOException 读取Object流信息失败* @throws ClassNotFoundException 泛型类不存在*/public static <T> List<T> deepCopy(List<T> src)throws IOException, ClassNotFoundException{ByteArrayOutputStream byteOut = new ByteArrayOutputStream();ObjectOutputStream out = new ObjectOutputStream(byteO...

Java深拷贝和浅拷贝【图】

定义 浅拷贝 基本数据类型 拷贝数值 引用类型 拷贝对象引用 深拷贝 基本数据类型 拷贝数值 引用类型 拷贝引用所对应对象的所有数值 浅拷贝实现方式 1. 拷贝构造方法 拷贝构造方法指的是该类的构造方法参数为该类的对象。使用拷贝构造方法可以很好地完成浅拷贝,直接通过一个现有的对象创建出与该对象属性相同的新的对象。 实现如下(PS:已略去部分代码): 浅拷贝-拷贝构造 运行结果:Student{age=18, parent=Parent{age=40}} St...

Java 浅拷贝、深拷贝,你知多少?【代码】【图】

转载链接:https://juejin.im/post/5de7237a518825125015cd6d 这是今天我们在技术群里面讨论的一个知识点,讨论的相当激烈,由于对这一块使用的比较少,所以对这一块多少有些盲区。这篇文章总结了所讨论的内容,希望这篇文章对你有所帮助。在 Java 开发中,对象拷贝或者说对象克隆是常有的事,对象克隆最终都离不开直接赋值、浅拷贝、深拷贝 这三种方式,其中直接赋值应该是我们最常用的一种方式吧,对于浅拷贝和深拷贝可能用的少,...

java – 深拷贝,浅拷贝,克隆【代码】

我需要澄清深度拷贝,浅拷贝和Java中的克隆之间的区别解决方法:不幸的是,“浅拷贝”,“深拷贝”和“克隆”都是相当不明确的术语. 在Java上下文中,我们首先需要区分“复制值”和“复制对象”.int a = 1; int b = a; // copying a value int[] s = new int[]{42}; int[] t = s; // copying a value (the object reference for the array above)StringBuffer sb = new StringBuffer("Hi mom");// copying an object. StringBuffe...