分配給null的變量與未分配給java的變量之間的區別是什麼?分配給null的變量與未分配的變量之間的區別
我知道有該方法的塊的差異,女巫意味着我可以使用已經初始化爲null變量,但我不能使用未初始化
你能告訴我爲什麼嗎?
編輯: 謝謝大家誰回答
我的問題是關於行爲和引用的內存
分配給null的變量與未分配給java的變量之間的區別是什麼?分配給null的變量與未分配的變量之間的區別
我知道有該方法的塊的差異,女巫意味着我可以使用已經初始化爲null變量,但我不能使用未初始化
你能告訴我爲什麼嗎?
編輯: 謝謝大家誰回答
我的問題是關於行爲和引用的內存
什麼被分配到
null
和其他變量之間的差異未分配?
null
(這就是爲什麼它不能被讀出)null
,5
或"hello"
) 。請注意,成員變量會自動獲取分配給它們的默認值(並且引用類型的默認值爲null
)。所以雖然看起來你可以看到一個「未初始化」的成員變量,但事實上它實際上已初始化爲,其實是。
它的明確意圖與寓意的形式。如果你沒有設置一個對象什麼你可能已經忘記了,因此編譯器提醒你。如果你明確地設置爲null,那麼編譯器相信你做出了選擇。此外,對於某些類型,未設置的值可能不是null,因此允許編譯器做出選擇是危險的(c.f. C++默認的實現方式不同)。
分配給null
變量意味着它沒有指向任何東西,其中的一個是不assigned
,如果它是一個局部變量意味着它甚至沒有初始化尚未
Test t1=null; ----> Not Pointing to any Object
Test t2; ------> Not even initialized
如果T2局部變量,你會使用它,你會得到編譯錯誤,因爲第一次初始化之前使用的默認值是不是有這個變量
見JLS 4.12.5. Initial Values of Variables:
對於所有引用類型(§4.3),默認值是
null
。
ReferenceType:
ClassOrInterfaceType
TypeVariable
ArrayType
所以這是對成員變量沒有什麼區別,如果不明確將其分配給null
,它會被隱式分配。
從被聲明但尚未初始化Oracle site
場Directely將被設置爲編譯器一個合理的默認值。一般來說,根據數據類型的不同,此默認值將爲零或空值。然而,依賴於這種默認值,通常被認爲是糟糕的編程風格。
下表總結了上述數據類型的默認值。
數據類型默認值(用於字段) 字節0 短0 INT 0 長0L 浮子0.0F 雙0.0D 炭 '\ u0000的' 字符串(或任何對象)空 布爾假
局部變量略有不同;編譯器從不將默認值分配給未初始化的局部變量。如果你不能初始化聲明它的局部變量,確保在你嘗試使用它之前給它賦值。訪問未初始化的本地變量將導致編譯時錯誤。
希望對你有幫助!
答案在於這樣的問題:其中一個分配的值爲null,其他人根本沒有分配的值。 – JonK 2015-04-02 13:54:43
檢查[jls](https://docs.oracle.com/javase/specs/jls/se8/html/jls-16.html) – SomeJavaGuy 2015-04-02 13:55:16
另請參閱http://stackoverflow.com/questions/12461607/does-它-使-A-差,如果-I-使用-A-默認initalisation或否,初始化 – Raedwald 2015-04-02 13:59:36