【Java】返回長度為零的數組或者集合,而不是null


  今天在牛客網上做一個編程題時,在提交代碼后老是拋出NullPointerException異常,大概的代碼如下:

 public ArrayList<Integer> foo(TreeNode root) {
	if (root == null)
		return null;
        ……
        ……
}

  后來改成如下代碼就通過了。

 public ArrayList<Integer> foo(TreeNode root) {
	if (root == null)
		return new ArrayList<Integer>();
        ……
        ……
}

  具體原因應該是牛客網中的測試代碼沒有考慮null的情況,希望我們返回的是一個空的ArrayList。

  就返回值到底應該是用null還是空集合的問題,查了一些資料:

《阿里巴巴JAVA開發手冊》書中表示:可以返回null,因為防止NPE是調用者的責任。

《Effective Java (Third Edition)》書中表示:返回長度為零的數組或者集合,而不是null。

再結合一下別的博客,自己大概總結一下:

  1)返回值為null並不會有什么問題,但是在“解引用”(dereference)時,調用者沒有對null進行判斷就會出現NullPointerException。

  2)在返回值為數組或者集合時,盡量返回長度為零的數組或者集合,而不是null,這樣在調用時就能簡化代碼,減少不必要的麻煩,並且不必擔心NullPointer異常(除非這對性能會造成很大的影響)。

 

 

 

  就對自己以后編程來說,編寫方法時,如果返回值是數組或者集合,就盡量返回長度為零的數組或者集合,而不是null。而自己調用方法時,還是要注意對null情況的判斷。

  此外,如果返回值為空對象時沒有意義的話,就可以考慮直接拋出異常。

 

推薦閱讀:

在Java中,return null 是否安全, 為什么?

【java】方法應該返回空對象還是null

Avoiding != null statements

【Stackoverflow好問題】去掉煩人的“!=null"(判空語句)

《Effective Java (Third Edition)》Item 54: Return empty collections or arrays, not nulls

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM