引用考慮下面的繼承示例:質疑在Java中
3210我的問題是在註釋中。這是不同的,從某種意義上說,使用new
運算符爲對象b2
和b2=b1
創建新空間只會將b1
的數據複製到b2
中。因此,對一個對象所做的任何更改都不會影響其他對象。在主內聯代碼中,B b2 = b1
將指向b2
到分配給b1
的空間。因此,這裏的任何更改都會影響對象數據。
我的查詢是,會用new
運算符對對象操作有什麼區別?
引用考慮下面的繼承示例:質疑在Java中
3210我的問題是在註釋中。這是不同的,從某種意義上說,使用new
運算符爲對象b2
和b2=b1
創建新空間只會將b1
的數據複製到b2
中。因此,對一個對象所做的任何更改都不會影響其他對象。在主內聯代碼中,B b2 = b1
將指向b2
到分配給b1
的空間。因此,這裏的任何更改都會影響對象數據。
我的查詢是,會用new
運算符對對象操作有什麼區別?
B b1 = new B();
B b2 = b1;
上面的代碼創建B
類型的只有一個對象。 b1和b2是指向同一個對象的引用。他們是別名到同一個對象。
B b1 = new B(); //1
B b2 = new B(); //2
b2 = b1; //3
在該代碼中,在線路1和2。然而創建B
類型的兩個對象,第3行,B2引用相同的對象之後爲B1又都是從而再次別名。現在由b2引用的對象現在變爲符合垃圾回收的條件。
因此,在這兩種情況下,b1和b2指向相同的對象,並且通過這兩個引用都可以看到對該對象所做的任何更改。請記住,b1和b2不是對象本身,而只是對象的引用。 b1 = b2不會將任何值從一個對象複製到另一個對象,它只是重新指定引用。
這使得一個A對象和一個B對象。有兩個對B對象的引用。
A a1 = new A();
B b1 = new B();
B b2 = b1;
這使得一個A對象和兩個B對象。有兩個對第一個B對象的引用。第二個B對象不再有對它的引用,並且可用於垃圾收集。
A a1 = new A();
B b1 = new B();
B b2 = new B();
B b2 = b1;
B b2 = b1;
在此步驟中沒有任何對象數據被複制。 b2和b1都將指向同一個對象。所以你用它來設置或獲取數據並沒有什麼不同。
B b2 = new B();
B b2 = b1;
b2.setValue("Foo");
b1.getValue(); // would return "Foo"
B b1 = new B()
創建一個新對象和參考分配給它,B1。
B b2 = b1
創建一個新的引用並將其設置爲等於b1,這是一個引用。
沒有「將b1的數據複製到b2中」。現在兩個參考指向相同的基礎對象。
沒有複製發生。 – whiskeysierra 2010-07-31 10:03:41