深拷贝和浅拷贝我是这样理解的:
值类型只能进行浅拷贝 原始对象和副本共用同一对象 值也相同
引用类型可以进行深拷贝和浅拷贝 要深拷贝必须实现ICloneable接口 深拷贝后 原始对象和副本是两个不同的对象 只是它们的值相同
可以这样理解吗
14 个解决方案
#1
1、值类型有深、浅拷贝之分吗?!
“值类型只能进行浅拷贝 原始对象和副本共用同一对象 值也相同”
这个说法有点问题。
2、深、浅拷贝我一直用C++的指针来理解。
区别在于拷贝的是指针指向的对象,还是只拷贝指针本身。
“值类型只能进行浅拷贝 原始对象和副本共用同一对象 值也相同”
这个说法有点问题。
2、深、浅拷贝我一直用C++的指针来理解。
区别在于拷贝的是指针指向的对象,还是只拷贝指针本身。
#2
学习
#3
2.同意樓主觀點。淺拷貝隻拷貝了引用,共用了所指向的數據;深拷貝相當於完全復制了一份,包括指向的數據
#4
这个还有什么疑问吗
#5
值类型只能深拷贝吧?因为本身没有引用调用,所有操作都与原对象无关.
而深拷贝也不一定必须实现ICloneable接口,具体算法的实现与继承关系是无关的
而深拷贝也不一定必须实现ICloneable接口,具体算法的实现与继承关系是无关的
#6
值类型只能进行深拷贝
应用类型的拷贝与实现ICloneable接口没有关系,你完全可以自己写一个叫Clone的方法,但是实现ICloneable接口是有意义的。
深拷贝会把对象内部的引用类型的对象也克隆一份,浅拷贝不会
比如你克隆一辆汽车,浅拷贝的话两量汽车会共享4个*,深拷贝的话就会各自拥有独立的*
应用类型的拷贝与实现ICloneable接口没有关系,你完全可以自己写一个叫Clone的方法,但是实现ICloneable接口是有意义的。
深拷贝会把对象内部的引用类型的对象也克隆一份,浅拷贝不会
比如你克隆一辆汽车,浅拷贝的话两量汽车会共享4个*,深拷贝的话就会各自拥有独立的*
#7
浅拷贝(shallow copy)是指当对象的字段值被拷贝时,字段引用的对象不会被拷贝,这样,当拷贝完毕后,源对象和拷贝对象的字段会引用同一个值。
深拷贝(deep copy)是对对象实例中字段引用的对象也进行拷贝的一种方式,这样,新对象将引用新的字符串。需要注意的是,执行深拷贝后,源对象和拷贝对象不会共享任何东西,改变一个对象对另一个对象没有任何影响。
深拷贝(deep copy)是对对象实例中字段引用的对象也进行拷贝的一种方式,这样,新对象将引用新的字符串。需要注意的是,执行深拷贝后,源对象和拷贝对象不会共享任何东西,改变一个对象对另一个对象没有任何影响。
#8
感觉和当前学习值调用和引用调用差不多的理解方式,只不过多出了2个名词解释。
#9
要深拷贝必须实现ICloneable接口 深拷贝后 原始对象和副本是两个不同的对象 只是它们的值相同
可以这样理解吗
可以.
可以这样理解吗
可以.
#10
可以这样理解! 但是千万注意, ICloneable接口实现后资源占用和时间消耗都在延长, 除了必须使用大量不同类副本的自动生成情况下以外, 建议使用其它方法替代.
#11
keyi
#12
study
#13
ICloneable.Clone 方法
返回值
作为此实例副本的新对象。
备注
Clone 既可作为深层副本实现,也可作为浅表副本实现。在深层副本中,所有的对象都是重复的;而在浅表副本中,只有*对象是重复的,并且*以下的对象包含引用。结果克隆必须与原始实例具有相同的类型或是原始实例的兼容类型。
以上是MSDN的解释。深拷贝不一定要实现ICloneable接口。有些类型的Clone方法提供的是浅拷贝。比如Arrary,ArraryList实现的就是浅拷贝。
如果想使用深拷贝,可以自己写一个方法。但深拷贝代价比较大。
返回值
作为此实例副本的新对象。
备注
Clone 既可作为深层副本实现,也可作为浅表副本实现。在深层副本中,所有的对象都是重复的;而在浅表副本中,只有*对象是重复的,并且*以下的对象包含引用。结果克隆必须与原始实例具有相同的类型或是原始实例的兼容类型。
以上是MSDN的解释。深拷贝不一定要实现ICloneable接口。有些类型的Clone方法提供的是浅拷贝。比如Arrary,ArraryList实现的就是浅拷贝。
如果想使用深拷贝,可以自己写一个方法。但深拷贝代价比较大。
#14
对于实现了ICloneable接口的系统类型
可以通过递归和反序列化(类型要继承了此接口)的方法来自己实现深拷贝
。
而对于自定义类型,则通过继承ICloneable接口的Clone方法,并重写Clone方法来自己实现
可以通过递归和反序列化(类型要继承了此接口)的方法来自己实现深拷贝
。
而对于自定义类型,则通过继承ICloneable接口的Clone方法,并重写Clone方法来自己实现
#1
1、值类型有深、浅拷贝之分吗?!
“值类型只能进行浅拷贝 原始对象和副本共用同一对象 值也相同”
这个说法有点问题。
2、深、浅拷贝我一直用C++的指针来理解。
区别在于拷贝的是指针指向的对象,还是只拷贝指针本身。
“值类型只能进行浅拷贝 原始对象和副本共用同一对象 值也相同”
这个说法有点问题。
2、深、浅拷贝我一直用C++的指针来理解。
区别在于拷贝的是指针指向的对象,还是只拷贝指针本身。
#2
学习
#3
2.同意樓主觀點。淺拷貝隻拷貝了引用,共用了所指向的數據;深拷貝相當於完全復制了一份,包括指向的數據
#4
这个还有什么疑问吗
#5
值类型只能深拷贝吧?因为本身没有引用调用,所有操作都与原对象无关.
而深拷贝也不一定必须实现ICloneable接口,具体算法的实现与继承关系是无关的
而深拷贝也不一定必须实现ICloneable接口,具体算法的实现与继承关系是无关的
#6
值类型只能进行深拷贝
应用类型的拷贝与实现ICloneable接口没有关系,你完全可以自己写一个叫Clone的方法,但是实现ICloneable接口是有意义的。
深拷贝会把对象内部的引用类型的对象也克隆一份,浅拷贝不会
比如你克隆一辆汽车,浅拷贝的话两量汽车会共享4个*,深拷贝的话就会各自拥有独立的*
应用类型的拷贝与实现ICloneable接口没有关系,你完全可以自己写一个叫Clone的方法,但是实现ICloneable接口是有意义的。
深拷贝会把对象内部的引用类型的对象也克隆一份,浅拷贝不会
比如你克隆一辆汽车,浅拷贝的话两量汽车会共享4个*,深拷贝的话就会各自拥有独立的*
#7
浅拷贝(shallow copy)是指当对象的字段值被拷贝时,字段引用的对象不会被拷贝,这样,当拷贝完毕后,源对象和拷贝对象的字段会引用同一个值。
深拷贝(deep copy)是对对象实例中字段引用的对象也进行拷贝的一种方式,这样,新对象将引用新的字符串。需要注意的是,执行深拷贝后,源对象和拷贝对象不会共享任何东西,改变一个对象对另一个对象没有任何影响。
深拷贝(deep copy)是对对象实例中字段引用的对象也进行拷贝的一种方式,这样,新对象将引用新的字符串。需要注意的是,执行深拷贝后,源对象和拷贝对象不会共享任何东西,改变一个对象对另一个对象没有任何影响。
#8
感觉和当前学习值调用和引用调用差不多的理解方式,只不过多出了2个名词解释。
#9
要深拷贝必须实现ICloneable接口 深拷贝后 原始对象和副本是两个不同的对象 只是它们的值相同
可以这样理解吗
可以.
可以这样理解吗
可以.
#10
可以这样理解! 但是千万注意, ICloneable接口实现后资源占用和时间消耗都在延长, 除了必须使用大量不同类副本的自动生成情况下以外, 建议使用其它方法替代.
#11
keyi
#12
study
#13
ICloneable.Clone 方法
返回值
作为此实例副本的新对象。
备注
Clone 既可作为深层副本实现,也可作为浅表副本实现。在深层副本中,所有的对象都是重复的;而在浅表副本中,只有*对象是重复的,并且*以下的对象包含引用。结果克隆必须与原始实例具有相同的类型或是原始实例的兼容类型。
以上是MSDN的解释。深拷贝不一定要实现ICloneable接口。有些类型的Clone方法提供的是浅拷贝。比如Arrary,ArraryList实现的就是浅拷贝。
如果想使用深拷贝,可以自己写一个方法。但深拷贝代价比较大。
返回值
作为此实例副本的新对象。
备注
Clone 既可作为深层副本实现,也可作为浅表副本实现。在深层副本中,所有的对象都是重复的;而在浅表副本中,只有*对象是重复的,并且*以下的对象包含引用。结果克隆必须与原始实例具有相同的类型或是原始实例的兼容类型。
以上是MSDN的解释。深拷贝不一定要实现ICloneable接口。有些类型的Clone方法提供的是浅拷贝。比如Arrary,ArraryList实现的就是浅拷贝。
如果想使用深拷贝,可以自己写一个方法。但深拷贝代价比较大。
#14
对于实现了ICloneable接口的系统类型
可以通过递归和反序列化(类型要继承了此接口)的方法来自己实现深拷贝
。
而对于自定义类型,则通过继承ICloneable接口的Clone方法,并重写Clone方法来自己实现
可以通过递归和反序列化(类型要继承了此接口)的方法来自己实现深拷贝
。
而对于自定义类型,则通过继承ICloneable接口的Clone方法,并重写Clone方法来自己实现