java List复制:浅拷贝与深拷贝】的更多相关文章

原文网址:http://blog.bd17kaka.net/blog/2013/06/25/java-deep-copy/ JAVA中的浅拷贝和深拷贝(shallow copy and deep copy) 一个示例 首先要区分”copy a value”和”copy an object”之间的区别: // copy a value int val = 1; int cpVal = val; // copy a value(the object reference for the array a…
复制 将一个对象的引用复制给另一个对象,一共有三种方式.第一种方式是直接赋值,第二种方式是浅复制,第三种方式是深复制. 1.直接赋值 在Java中,A a1 = a2,这实际上复制的是引用,也就是说 a1 和 a2指向的是同一个对象.因此,当a1变化时,a2里面的成员变量也会跟着变化. 2.浅复制(复制引用但不复制引用的对象) 浅复制,又称为浅拷贝.创建一个新对象,然后将当前对象非静态字段复制到该新对象,如果字段是值类型的,那么对该字段执行复制:如果该字段时引用类型的话,则复制引用但不复制引用的…
浅拷贝: package test; class Student implements Cloneable { private int number; public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } @Override public Object clone() { Student stu = null; try { stu = (Stude…
Java中的数据类型分为基本数据类型和引用数据类型.对于这两种数据类型,在进行赋值操作.方法传参或返回值时,会有值传递和引用(地址)传递的差别. 浅拷贝(Shallow Copy): ①对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象.因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据. ②对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组.某个类的对象等,那么浅拷贝会进行引用传递,也就是只…
1.浅拷贝 只会复制地址值,也就是同一个对象两个引用,只是复制了一个引用而已. 2.深拷贝 重新在堆里创建一个新对象给新引用,连同地址值也不一样. 首先要知道Object的clone()方法, public class Test implements Cloneable{ public static void main(String[] args) throws CloneNotSupportedException { Test a = new Test(); Object clone = a.…
浅拷贝: 在堆内存中不会分配新的空间,而是增加一个引用变量和之前的引用指向相同的堆空间. int[] a = {1,2,3,4,5}; int[]b = a; public class Test { public static void main(String[] args) { //数组的浅拷贝,a,b两个引用指向同一个数组 int[] a = {1,2,3,4,5}; int[] b = a; for (int i = 0; i < b.length; i++) { System.out.p…
先抛出结论: 浅拷贝是引用拷贝,A对象拷贝B以后,A对象和B对象指向同一块内存地址,改变A对象的属性值会触发B对象属性的改变,有安全风险 深拷贝是对象拷贝,A对象拷贝B以后,A对象和B对象指向不同的额内存地址,改变A对象的属性值不会触发B对象属性的改变,无安全风险,但是成本较高 如何实现深拷贝: 实现Clonable接口,重写clone方法 代码如下 package com.gabriel.stage.vo; import lombok.AllArgsConstructor; import lo…
Java的拷贝可以分为三种:浅拷贝(Shallow Copy).深拷贝(Deep Copy).延迟拷贝(Lazy Copy). 在java中除了基本数据类型之外(int,long,short等),还存在引用数据类型,例如String以及对象实例. 对于基本数据类型,实际上是拷贝它的值,而对于引用数据类型,拷贝的就是它的引用,并没有创建一个新的对象,即没有分配新的内存空间.这样的拷贝就称作浅拷贝. 深拷贝就是在引用类型进行拷贝时,创建了新的对象,即分配了新的内存空间给拷贝对象.下面就来具体看看浅拷…
Java中任何实现了Cloneable接口的类都可以通过调用clone()方法来复制一份自身然后传给调用者.一般而言,clone()方法满足:       (1) 对任何的对象x,都有x.clone() !=x,即克隆对象与原对象不是同一个对象.       (2) 对任何的对象x,都有x.clone().getClass()==x.getClass(),即克隆对象与原对象的类型一样.       (3) 如果对象x的equals()方法定义恰当,那么x.clone().equals(x)应该成…
Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去.举例说明:比如,对象A和对象B都属于类S,具有属性a和b.那么对对象A进行拷贝操作赋值给对象B就是:B.a=A.a;  B.b=A.b; 在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用现有对象的部分或全部 数据. Java中的对象拷贝主要分为:浅拷贝(Shallow Copy).深拷贝(Deep Copy). 先介绍一点铺垫知识:Java中的数据类型分为基本数据…