java引用类型的浅拷贝与深拷贝理解

1.浅拷贝

只会复制地址值,也就是同一个对象两个引用,只是复制了一个引用而已。

2.深拷贝

重新在堆里创建一个新对象给新引用,连同地址值也不一样。

首先要知道Object的clone()方法,

 1 public class Test implements Cloneable{
 2
 3     public static void main(String[] args) throws CloneNotSupportedException {
 4         Test a = new Test();
 5         Object clone = a.Clone();
 6         System.out.println(a == clone);
 7         System.out.println(a);
 8         System.out.println(clone);
 9     }
10     public Object Clone() throws CloneNotSupportedException {
11         return super.clone();
12     }
13 }

以上运行结果为:

说明是重新创建了一个新的对象。

原文地址:https://www.cnblogs.com/pastjx/p/12084302.html

时间: 2024-09-29 01:51:06

java引用类型的浅拷贝与深拷贝理解的相关文章

深刻理解 引用类型、浅拷贝、深拷贝

简单粗暴的理解,就是对象都是引用类型 但是有的时候需要完全复制一个新的对象,操作新对象的时候不会改变原对象,这个时候就有了浅拷贝和深拷贝, 浅拷贝,拷贝的只是对象的一级内容,而子集内容还是引用类型,会随着新对象值的改变而改变, 深拷贝,完全拷贝出一个一模一样但是 没有任何关联的对象. var obj ={ name:1, age:{ a:2, b:{ c:123456 } } }; var obj2 = copy(obj); function copy(obj){ var newobj = {}

Java基础之浅拷贝与深拷贝

含义 浅拷贝:进对对象本身(包括对象中的基本变量)进行拷贝,而不拷贝对象包含的引用指向的对象. 深拷贝:不仅对对象本身,而且还对对象所包含的引用指向的对象进行拷贝. 深拷贝可以看做是对浅拷贝的递归. 举例来说:对象A1中包含对B1的引用,B1中包含对C1的引用.浅拷贝A1得到A2,A2 中依然包含对B1的引用,B1中依然包含对C1的引用.深拷贝则是对浅拷贝的递归,深拷贝A1得到A2,A2中包含对B2(B1的copy)的引用,B2 中包含对C2(C1的copy)的引用. 克隆方法clone() p

Java对象的浅拷贝和深拷贝&&String类型的赋值

Java中的数据类型分为基本数据类型和引用数据类型.对于这两种数据类型,在进行赋值操作.方法传参或返回值时,会有值传递和引用(地址)传递的差别. 浅拷贝(Shallow Copy): ①对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象.因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据. ②对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组.某个类的对象等,那么浅拷贝会进行引用传递,也就是只

Java中的浅拷贝与深拷贝

Object中的clone方法: protected native Object clone() throws CloneNotSupportedException; 创建并返回此对象的一个副本.“副本”的准确含义可能依赖于对象的类.这样做的目的是,对于任何对象 x,表达式: x.clone() != x 为 true,表达式: x.clone().getClass() == x.getClass() 也为 true,但这些并非必须要满足的要求.一般情况下: x.clone().equals(x

java 引用类型 和 基本类型的理解

1.引用类型是一个容器,一个容器就是自己的子元素 2.基本类型是一个独立的元素 区别 容器都有自己特性(属性.方法) 基本类型没有 有自己的属性的是变量就是引用类型变量 反之就是基本类型. 可以试下,下面的变量声明以后根一个" . " 会有属性.方法出现吗? int i=0; String a="0"; boolean b=true; List list=new ArrayList(); list.add("st"); Array ae=null

js基本类型与引用类型,浅拷贝和深拷贝

1. 基本类型: string,number,boolean,null,undefined 2. 引用类型: Function,Array,Object 基本类型:存放在栈内存中的简单数据段,数据大小确定,内存空间大小可以分配. 5种基本数据类型有Undefined.Null.Boolean.Number 和 String,它们是直接按值存放的,所以可以直接访问. 引用类型:存放在堆内存中的对象,变量实际保存的是一个指针,这个指针指向另一个位置.每个空间大小不一样,要根据情况开进行特定的分配.

浅析java的浅拷贝和深拷贝

Java中任何实现了Cloneable接口的类都可以通过调用clone()方法来复制一份自身然后传给调用者.一般而言,clone()方法满足:       (1) 对任何的对象x,都有x.clone() !=x,即克隆对象与原对象不是同一个对象.       (2) 对任何的对象x,都有x.clone().getClass()==x.getClass(),即克隆对象与原对象的类型一样.       (3) 如果对象x的equals()方法定义恰当,那么x.clone().equals(x)应该成

java List复制:浅拷贝与深拷贝

Java的拷贝可以分为三种:浅拷贝(Shallow Copy).深拷贝(Deep Copy).延迟拷贝(Lazy Copy). 在java中除了基本数据类型之外(int,long,short等),还存在引用数据类型,例如String以及对象实例. 对于基本数据类型,实际上是拷贝它的值,而对于引用数据类型,拷贝的就是它的引用,并没有创建一个新的对象,即没有分配新的内存空间.这样的拷贝就称作浅拷贝. 深拷贝就是在引用类型进行拷贝时,创建了新的对象,即分配了新的内存空间给拷贝对象.下面就来具体看看浅拷

Java的浅拷贝与深拷贝总结

Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去.举例说明:比如,对象A和对象B都属于类S,具有属性a和b.那么对对象A进行拷贝操作赋值给对象B就是:B.a=A.a;  B.b=A.b; 在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用现有对象的部分或全部 数据. Java中的对象拷贝主要分为:浅拷贝(Shallow Copy).深拷贝(Deep Copy). 先介绍一点铺垫知识:Java中的数据类型分为基本数据