回答
如果它是一個字段(靜態或實例變量),那麼兩者大致相同,因爲null
是默認值。 (如果一個超級構造函數調用覆蓋方法來設置值,這是一個細微的差別,但這是一個極端情況。)
如果它是一個局部變量,它們非常不同 - 在第一種形式中,局部變量是明確指定,並且該值可以在下一個語句中讀取。在第二種形式,變量不明確分配,你將無法從代碼讀取它,直到這種地步編譯器可以證明一個值將被寫入:
void foo() {
String x = null;
String y;
System.out.println(x) // Fine, prints null
System.out.println(y); // Compile-time error
}
所以在局部變量可以使用之前,它必須被聲明和賦值。我想知道爲什麼不能給本地變量一個默認值? – Ivan 2012-02-29 07:42:05
@Ivan:因爲它有助於防止出現錯誤,那裏有一個你沒有想到的代碼路徑 - 例如你*認爲你總是會進入一個循環,因爲你沒有考慮到特定的場景。 – 2012-02-29 07:45:15
第一個聲明給出connection
a 的值爲空。這是完全有效的代碼,並且可以很好地編譯,但是如果你試圖調用一個方法,你會得到一個NullPointerException異常。
第二次申報離開connection
未初始化。您可以稍後通過爲其分配一個值來初始化它,但如果在初始化之前嘗試訪問它,則代碼將不會編譯。 Java(明智地)在編譯器/ JIT中具有保護功能,以防止您訪問未初始化的值。
第二個版本是在一對夫婦的情況下非常有用:
- 當你想在將在以後的構造被初始化類聲明的字段。
- 當要聲明變量具有較大範圍(在方法中的頂層範圍例如,使得該方法中的多個代碼塊可以訪問相同的值)
這些答案中給出任何有關Java基礎知識的書籍。當變量用作類字段時,將自動分配空值。如果變量是在一個方法中創建的,那麼直到null或某個值被分配給它才能被使用。
這裏我們有2個案例。
原語: 在這種情況下,如果我們的值賦給一個原始的,這將是它的價值。如果我們沒有賦值,數值類型的默認值將爲0,因爲布爾值將爲假...
對象,非基元: 在這種情況下,如果我們分配一個值..比方說,使用新的,我們將有一個新的對象具有新的價值。 如果我們不進行初始化,任何對象(Object類的子類)的默認值,將爲空
音符。這是對發生的事情的一個非常簡短的描述......需要對這個主題進行研究,以便對此有一個清晰和正確的想法。
這取決於上下文。
如果connection
是一個字段,則沒有區別。字段默認初始化,並且具有引用類型的字段默認初始化爲null
。
如果connection
是局部變量,則第二種形式表示connection
變量未初始化。沒關係,但編譯器會堅持在你嘗試使用它的值之前,變量肯定是初始化的(以後)。
- 1. 分配null和不分配null有什麼區別?
- 2. iOS將ID分配給某些東西?
- 3. 爲什麼我不能將價值分配分成兩個不同的陳述?
- 4. NullPointerException:如何分配它的東西,所以它不是null?
- 5. 將變量分配給null做什麼?
- 6. 從沒有數據的讀取器中分配任何東西不加雙倍
- 7. 將不同的公有IP分配給不同的Docker容器
- 8. 如何將值分配給sqlparameter NULL值而不檢查null或0?
- 9. Oracle觸發器 - 有什麼價值:當沒有任何東西被傳遞時,新的有什麼價值?
- 10. 爲什麼不將listbox分配給gridview?
- 11. 將相同的值分配給具有不同ID的所有元素
- 12. Qt是否有與Boost的分配模塊相同的東西?
- 13. 如何將值分配給具有相同ID的不同跨度的變量
- 14. 我怎麼能在Git中做分支或者什麼東西
- 15. 如何將值分配給[任何]
- 16. 如何將值分配給iOS中的不同IBActions?
- 17. 初學者:給Java分配數組值
- 18. C++:將不同部分的輸入分配給不同變量
- 19. .NET使用IIF價值分配給不同的變量
- 20. 爲什麼我的Perl不匹配運算符匹配任何東西?
- 21. 將var分配給null以產生兩個不同的查詢
- 22. 將null分配給XMLGregorianCalendar
- 23. logback.groovy配置不記錄任何東西
- 24. F#SQLProvider - 將NULL值分配給字段
- 25. SQL分配不同的顏色,以不同的價值觀
- 26. 分配的內存沒有把它分配的價值
- 27. 將不同的圖標分配給JTree中的不同節點
- 28. 將不同的值分配給多個具有相同名稱的JQuery選擇
- 29. 爲什麼變量有時不分配?
- 30. 在列表列表中的值分配給元素分配給價值
你讀過這個嗎? http://stackoverflow.com/questions/5083169/what-is-the-advantage-of-null-assignment-in-java – batbaatar 2012-02-29 07:31:35