package com.thinking.in.java.object;public class Alisa2 implements Cloneable {
private int i; public Alisa2(int ii) {
this.i = ii;
} public static void f(Alisa2 reference) {
reference.i++;
} public Object clone() {
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
} public static void main(String[] args) throws CloneNotSupportedException {
Alisa2 x = new Alisa2(7);
System.out.println("x:" + x.i);
System.out.println("Calling f(x)");
f(x);
System.out.println("x:" + x.i);
Alisa2 y = (Alisa2) x.clone();
System.out.println("y:" + y.i);
f(y);
System.out.println("y:" + y.i);
System.out.println("x:" + x.i); }}
package com.thinking.in.java.object;import java.util.ArrayList;
import java.util.Iterator;class Int {
private int i; public Int(int ii) {
this.i = ii;
} public void increment() {
i++;
} public String toString() {
return Integer.toString(i);
}
}public class Cloning { public static void main(String[] args) {
ArrayList<Int> v = new ArrayList<Int>();
for (int i = 0; i < 10; i++) {
v.add(new Int(i));
}
System.out.println("V:" + v);
ArrayList<Int> v2 = (ArrayList<Int>) v.clone();
for (Iterator<Int> e = v2.iterator(); e.hasNext();) {
((Int) e.next()).increment();
}
System.out.println("V:" + v);
System.out.println("V2" + v2); }}
为什么 对 Alisa2 进行克隆修改其克隆对象不会改变其原对象,而对 ArrayLilst 进行克隆 修改其克隆对象,会改变去原对象。
望高手解答,小弟先谢谢了。