这里需要空检查吗?

时间:2017-05-03 07:47:18

标签: java null-check

我在项目中遇到了这行代码:

String statusRecoTime = sdf.format(cal.getTime());

然后有一个空检查,如

if (statusRecoTime != null) {
     //do something
}

我认为statusRecoTime将永远不会为空,并且不需要进行此检查,因为它已分配了一个对象。

如果我的理解是正确的,请告诉我?

4 个答案:

答案 0 :(得分:2)

如果传递的日期为空,则从SimpleDateFormat docs开始,该方法返回NullPointerException

  

SimpleDateFormat.format()

     

将给定的Date格式化为日期/时间字符串并附加结果   到给定的StringBuffer

     

指定b y:
      课程format中的DateFormat
  的参数:       date - 要格式化为日期时间字符串的日期时间值       toAppendTo - 要附加新的日期时间文本。
      pos - 格式化位置。输入时:如果需要,可以使用对齐字段。输出时:对齐字段的偏移量   返回:格式化的日期时间字符串   的抛出:       NullPointerException - 如果给定日期为空。

无需检查statusRecoTime != null,因为null会有例外。

答案 1 :(得分:0)

不,你不需要在这里进行任何空检查,好像 sdf 将无法格式化它将抛出错误而不是null的时间。虽然如果您在 sdf 中定义了正确的格式,那么您正在制作日历例外时间也不会出现。

答案 2 :(得分:0)

假设sdfSimpleDateFormat个实例,format将永远不会返回nullnull检查完全没必要。

这里的各种答案都关注该代码是否会引发异常。唯一的时间是sdfcal null。但假设两者都不是nullcalCalendar,则该代码不会抛出异常。

答案 3 :(得分:0)

我假设sdfSimpleDateFormat个实例。

首先要检查的是文档,正如Mistalis在an answer中所做的那样。单参数format方法在超类DateFormat中声明,文档说明

  

返回:
格式化的时间字符串。

这应该足够了。没有提到它可以返回null,因此不需要检查。我们可以在这里停下来。

如果您想更加确定,我们可以检查您正在使用的Java版本的源代码。在Java 8中(我希望,在所有版本中)format(Date)调用三参数format方法,返回StringBuffer并调用其toString()方法。 StringBuffer.toString()生成new String()。保证new永远不会返回null。所以现在我们可以肯定。

除外:邪恶的人可能会编写SimpleDateFormat的子类,其中format(Date)可能会返回null与文档冲突。你的sdf变量可能包含这样一个邪恶子类的实例。你可以得到null。如果您从代码中了解到sdf始终是SimpleDateFormat而不是某些自行开发或第三方子类,我们可以排除这种可能性。