-
Notifications
You must be signed in to change notification settings - Fork 784
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-06-13:Java 中深拷贝与浅拷贝的区别? #75
Comments
深拷贝是创建一个新的对象然后赋值相同的值,浅拷贝是引用指向同一个对象 |
深拷贝是址拷贝,浅拷贝是值拷贝 |
你说反了吧 |
浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址。因此如果其中一个对象改变了地址,就会影响到另一个对象。 |
首先需要明白,浅拷贝和深拷贝都是针对一个已有对象的操作。那先来看看浅拷贝和深拷贝的概念。在 Java 中,除了基本数据类型(元类型)之外,还存在 类的实例对象 这个引用数据类型。而一般使用 『 = 』号做赋值操作的时候。对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去,他们实际上还是指向的同一个对象。而浅拷贝和深拷贝就是在这个基础之上做的区分,如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是进行了引用的传递,而没有真实的创建一个新的对象,则认为是浅拷贝。反之,在对引用数据类型进行拷贝的时候,创建了一个新的对象,并且复制其内的成员变量,则认为是深拷贝。所以到现在,就应该了解了,所谓的浅拷贝和深拷贝,只是在拷贝对象的时候,对 类的实例对象 这种引用数据类型的不同操作而已。总结来说:1、浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。2、深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。 |
在Java中浅拷贝和深拷贝就是在这个基础之上做的区分,如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是进行了引用的传递,而没有真实的创建一个新的对象,则认为是浅拷贝。反之,在对引用数据类型进行拷贝的时候,创建了一个新的对象,并且复制其内的成员变量,则认为是深拷贝。 |
无论是拷贝基本数据类型还是引用类型,只要没有创建一个新的对象就成为浅拷贝,如果创建了一个对象并且复制了其内的成员变量成为深拷贝 |
看了一会 还是不明白 和头像一样 打卡打卡 |
浅拷贝和深拷贝的区别是 如果对象里的成员变量存在引用类型, 当使用浅拷贝时, 新对象的这个属性的地址值和源对象的这个属性一致,即浅拷贝只是对引用类型的地址值拷贝,深拷贝是创建了新的对象,只是属性复制, 浅拷贝的缺点是如果对对象进行多处复制,如果在运行中对其中一个对象的属性进行改变, 那么所有复制的对象都会被改变,不利于管理 |
浅拷贝: public class ShallowCopy implements Cloneable {
} 深拷贝:
}
} |
确定会创建一个新对象吗,感觉深拷贝才会创建啊 |
深拷贝中,如果拷贝的是引用类型,那么会创建一个新的引用类型,并把这个引用类型的地址赋值给新的对象。但是如果这个引用类型指向的对象后续还包括引用类型属性的话,后面会继续深拷贝吗? |
没有什么问题是一个例子理解不了的 |
浅拷贝: |
No description provided.
The text was updated successfully, but these errors were encountered: