JBTALKS.CC

标题: 这两个什么区别?? [打印本页]

作者: soonlvu    时间: 2009-8-5 08:24 PM
标题: 这两个什么区别??
java 里面的Shallow Copy 和 Deep Copy有什么区别?
又怎样用???
作者: Super-Tomato    时间: 2009-8-5 09:13 PM
原帖由 soonlvu 于 2009-8-5 08:24 PM 发表
java 里面的Shallow Copy 和 Deep Copy有什么区别?
又怎样用???


Shallow 和 Deep 不只是有 Java 上才有, 最簡單的說明就是 Shallow 複製的對象只有物件結構, 而 Deep 就包括結構中的屬性和對象等其他物件
例子去搜索應該會有很多
作者: soonlvu    时间: 2009-8-8 12:40 PM
原帖由 Super-Tomato 于 2009-8-5 09:13 PM 发表


Shallow 和 Deep 不只是有 Java 上才有, 最簡單的說明就是 Shallow 複製的對象只有物件結構, 而 Deep 就包括結構中的屬性和對象等其他物件
例子去搜索應該會有很多


哪一种会比较好用????em0010
作者: ~Zero    时间: 2009-8-8 02:26 PM
看是什么用途, 没有说好用不好用的.

通常你 copy 一个 array 之类的 data structure,

  1. Array a;
  2. Array b;
  3. b = a;
复制代码


by default 是 shallow copy 罢了, 就是说其实 compiler/interpreter 只是把 b 的 address 改成指去 a 那边.
如果过后你在 array b 里面改东西的话, 也会影响到 array a.

Deep copy 的话是里面每一个 element 都 copy 出来,

  1. Array a = {......}
  2. Array b;

  3. for (i = 1...n)
  4. { b[i] = a[i]; }
复制代码


两个 array 是不同的个体, 只不过里面的 element 一模一样.
在 b 里面改的东西不会影响到 a.
作者: soonlvu    时间: 2009-8-11 01:41 AM
原帖由 ~Zero 于 2009-8-8 02:26 PM 发表
看是什么用途, 没有说好用不好用的.

通常你 copy 一个 array 之类的 data structure,

Array a;
Array b;
b = a;

by default 是 shallow copy 罢了, 就是说其实 compiler/interpreter 只是把 b 的 ad ...


deep copy 还是不懂咯

是不是如果
Array a ={'a','b','c'};
Array b={};

for(i=0....n)
{b=a;}

b里面就会变成a的东西了。。。

怎么不讲b里面的东西改了a不会影响?
为什么不会影响???
作者: zechs    时间: 2009-8-11 07:37 PM
http://en.wikipedia.org/wiki/Object_copy
图文解释,蛮清楚的。




欢迎光临 JBTALKS.CC (https://jbtalks.my/) Powered by Discuz! X2.5