我在项目中遇到了这行代码:
String statusRecoTime = sdf.format(cal.getTime());
然后有一个空检查,如
if (statusRecoTime != null) {
//do something
}
我认为statusRecoTime
将永远不会为空,并且不需要进行此检查,因为它已分配了一个对象。
如果我的理解是正确的,请告诉我?
答案 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)
假设sdf
是SimpleDateFormat
个实例,format
将永远不会返回null
。 null
检查完全没必要。
这里的各种答案都关注该代码是否会引发异常。唯一的时间是sdf
或cal
null
。但假设两者都不是null
而cal
是Calendar
,则该代码不会抛出异常。
答案 3 :(得分:0)
我假设sdf
是SimpleDateFormat
个实例。
首先要检查的是文档,正如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
而不是某些自行开发或第三方子类,我们可以排除这种可能性。