2012-12-27 32 views
1

不初始化實例變量是否保存任何內存?使用和不使用初始化的內存使用爲空

例如,比較以下兩類:

public class Class1 { 
    private String s; 
    // getter/setter for s 
} 

public class Class2 { 
    private String s = ""; 
    // getter/setter for s 
} 

假定已經有一個字符串常量的""別處,並new Class1()消耗比new Class2()存儲器少?

+3

反正它用'null'隱式地初始化。 –

回答

1

可能取決於JVM實現。兩者的主要區別在於生成的代碼。 Class2將明確地將s的值設置爲所有情況。而Class1可能從未將s設置爲導致意外行爲的特定事件。

+0

「,而Class1可能從未將s設置爲導致意外行爲的特定事件」據我所知,根據規範,s將始終初始化爲默認值null。你有任何支持你的聲明的鏈接嗎? –

+0

看着字節碼。設置爲null會將常數值0加載到引用中。沒有設置在字節碼級別沒有做任何事情,我希望JVM能夠正確地啓動它,這是一種常見的做法,因此如果JVM沒有這樣做會出現意想不到的行爲。 – BevynQ

2

不,默認情況下未初始化的變量設置爲null。原始類型的一些其他默認初始化規則是:

  • boolean - 始終設置爲false。
  • int,floatdouble - 被設置爲零。
0

如果將它初始化爲null(默認值)或不初始化,它將無論如何初始化,所以我不認爲會有任何內存使用差異。

但通常爲了更好地理解(不需要記住所有代碼讀取器的默認值),將它們明確初始化似乎是很好的。