2016-02-06 157 views
2

可以說我有一個汽車類,我爲這個汽車類創建了一個參考變量。每次我創建一個對象時,新的引用變量?

Car car = new Car() - 相當直截了當。

我通過調用編輯轎車的特性:car.setColor("Red"), and car.setPrice(2500).

現在,讓我們說,我想創建一個新的Car對象,我必須創建這樣一個新的參考變量:Car car2= new Car();或可我只是簡單地爲新車使用原始參考變量?

+0

你想要什麼?你通過創建一個新的參考變量意味着什麼?你想從舊對象獲取數據嗎?你想讓它們指向相同的實際對象嗎? – SOFe

回答

0

對象不過是在堆中創建的臨時緩衝區。
每當您創建一個新對象時,堆中都會提供一個新的緩衝區(或空間)。

0

您當然可以重用您的第一個car變量,這在某些情況下(例如循環)很常見。請記住,原始變量的引用將被替換,因此除非您在其他位置存儲對該對象的引用(例如在另一個對象的集合或字段中),否則該對象將被垃圾收集。

3

簡短回答:這取決於你。

長答案:您可以使用任何一種方法。如果您創建一輛新車,您創建的前一輛車不會受到影響,因爲不同的物體是完全獨立的。比方說,

Car car1 = new Car(); 
car1.setColor("Red"); 
car1.setPrice(2500); 
Car car2 = new Car(); 
car2.setColor("Blue"); 
car2.setPrice(3000); 

現在car1car2有不同的顏色和價格。如果更改car1的值,則car2不會受到影響。

或者,你重用car1

Car car1 = new Car(); 
car1.setColor("Red"); 
car1.setPrice(2500); 
car1 = new Car(); //You created the new car here 
car1.setColor("Blue"); 
car1.setPrice(3000); 

此代碼後,car1原來的內容丟失*。如果您認爲car1不再有用,並且可以丟棄其內容,則可以使用此選項。

*注意:car1的對象仍在內存中。但它是無法訪問的。

2

擴展在掃地的回答是:

如果我們不是這樣做:

Car car1 = new Car(); 
car1.setColor("Red"); 
car1.setPrice(2500); 
Car car2 = car1; 
car2.setColor("Blue"); 
car2.setPrice(3000); 

然後,兩個CAR1和CAR2將有藍色的顏色和3000的價格,因爲他們指指同一個對象。如果我們再重新分配CAR 1:

car1 = new Car(); 
car1.setColor("Green"); 
car1.setPrice(0); 

CAR 1將有綠色的顏色和0的代價,但CAR2還是會有藍色的顏色和3000的價格,因爲它仍然引用創建原始對象爲car1。

+0

很好的解釋! – Sweeper

相關問題