• 【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

  • 相关阅读:
    数据表管理admin
    HDU 5057
    HDU 5056
    HDU 6035(树形dp)
    CodeForces 586D
    Codeforces 940D
    CodeForces 820C
    TOJ4114(活用树状数组)
    2017CCPC中南地区赛 H题(最长路)
    CodeForces 544C (Writing Code)(dp,完全背包)
  • 原文地址:https://www.cnblogs.com/yongh/p/9812596.html
Copyright © 2020-2023  润新知