作者TWisely (名)
看板java
标题Re: [虫?] 灵异现象??=口=""
时间Wed Mar 1 18:22:59 2006
※ 引述《TonyQ (骨头)》之铭言:
: ※ 引述《TsaiCF (Feng)》之铭言:
: : : 那如果我想要先把阵列A备份为阵列B~
: : System.arraycopy
: copyarray很人性化 可以选择开始跟结束的index:)
: 不过如果是要直接copy物件的话
: 也是可以采用 clone() 这是不限定在Array能使用的方法
: 只要是物件,就能透过clone()方法和转型的协助,
: 产生一个同样内容且非参考同一位址的物件。
: Call By Reference 是个很有趣的现象。:)
: -----------------------------
: ex.
: String a[]={"a","b","c","d","f"};
: String b[]=(String[])a.clone();
: a[0]="g";
: for(String i:b){
: System.out.println(i);
: }
: for(String i:a){
: System.out.println(i);
: }
在各大大後面再补充详细一点…
由於arraycopy及clone皆为浅层拷贝,
也就是直接拷贝物件栏位内容,而不管该栏位对应的物件个体内容。
故若栏位对应到一阵列,该物件经clone後,
复制的结果也只有对到该阵列的参照,而不会去一个个复制该阵列的元素。
因此原问在提及阵列备份时,
若只是一维阵列,用clone及arraycopy当然没问题;
但若是一维以上就得对指标层的元素一一去做复制才能做到完整的备份。
(前提为阵列元素是不可变(Immutable)物件,如原问范例中的String;
若为可变物件如List的话,就算是一维也得要一个个元素去做复制才行。)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.30.117