2
我期望v上的淺拷貝和輸出701 801,但我看到700 801.我看不到一個好的解釋。如果w是淺拷貝,爲什麼不是v?整數是否分配了一個整數「rebox」?爲什麼v,w的賦值行爲有所不同?
class Scalar {
Integer w;
public String toString() { return String.valueOf(w); }
}
public class Demo {
public Integer v;
public Scalar scal;
Demo shallowCopy() {
Demo scopy = new Demo();
scopy.v = this.v; // <- Given this I would 701 from
scopy.scal = this.scal;
return scopy;
}
public String toString() { return String.valueOf(v) + " " + scal.toString(); }
public static void main(String[] args) {
Demo d1 = new Demo();
d1.v = 700;
d1.scal = new Scalar();
d1.scal.w = 800;
Demo d2 = d1.shallowCopy();
d2.v = 701;
d2.scal.w = 801;
System.out.println(d1);
}
}
Java包裝類型* *不可變*。 –