2011-08-18 411 views
2

考慮一個名爲Calculator用下面的代碼類:對象引用聲明和對象構造之間的區別?

class Calc extends Calculator { 

    Calculator calculator;     // [Style 1] 

    Calculator calculator = new Calculator(); // [Style 2] 
} 

據我所知,沒有記憶已經[1]分配,但在聲明中[2]創建一個新的Calculator對象。

除此之外還有其他差異嗎?

回答

2

在第一種情況下,沒有對象計算器被創建,變量的值是null

0

第一個引用的值爲空,第二個引用的值指向對象。另外,如果你有Calculator類的非默認構造函數(帶有一些副作用,例如記錄),它在第一種情況下不會被調用。

6

當你寫

Calculator calculator; 

它只是意味着你要聲明類型Calculator的對象的引用。引用不是一個對象,所以內存不分配。

當你寫

new Calculator(); 

它構建Calculator類型的對象,並返回到該對象的引用。

所以,當你寫

Calculator calculator = new Calculator(); 

這意味着你構造對象,並存儲在calculator對它的引用。

'calculator'不是一個對象,它只是對這個對象的引用。您可以有多個對同一個對象的引用。

更新: 關於這個話題的標題,創建類和創建對象的情況下是絕對相同的。你的意思是,我相信,聲明一個參考對象 VS 與就地分配宣佈它(雖然我不完全確定的術語):-)

3

Calculator calculator; - 變量其定義計算器 ..你告訴編譯器它可以容納計算器類型的變量,而沒有別的。它現在已經空,沒有任何分配..

Calculator calculator = new Calculator();--這個實際存儲參考堆上創建於計算器變量Calculatore對象。現在它存儲一個稱爲初始化的變量。

相關問題