2010-01-15 194 views
12

我讀過Java爲類屬性提供默認值,但不提供局部變量。那是對的嗎?如果是這樣的原因是什麼?當你做得很好的時候,爲什麼不能一直這樣做呢?實例變量和局部變量的默認值

感謝,
羅傑

+1

「初始變量值」的方便參考卡:http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.12.5 – trashgod 2010-01-15 22:26:20

+0

可能的重複[爲什麼是局部變量沒有在Java中初始化?](http://stackoverflow.com/questions/415687/why-are-local-variables-not-initialized-in-java) – Raedwald 2014-03-11 13:08:00

+0

這裏是一個[更新的鏈接](http://docs.oracle.com .com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.5)作爲trashgod的參考。 – jpaugh 2015-12-24 17:40:50

回答

24

標準局部變量都保存在棧上,而不是實際創建直到它們被初始化。如果沒有使用局部變量,它不會進入堆棧。然而,成員變量分配在堆中,因此有一個默認的佔位符(空引用或默認原語)。

+0

最好的解釋 – 2015-10-12 12:09:38

1

的非技術原因的背後也可能是下列之一:

如果聲明是爲了與你用它做一個局部變量。用法與分配值相關。因此,訪問已聲明但未初始化的變量沒有多大意義 - 程序員可能已經忘記初始化該變量。

但是,字段可能只能用於直到或在對象的生命週期的指定點之後。強制程序員初始化它們都不會好。