1

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

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

然后有一个空检查,如

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

我认为它statusRecoTime永远不会为空,也不需要这个检查,因为它被分配了一个对象。

请让我知道我的理解是否正确?

4

4 回答 4

2

SimpleDateFormat 文档NullPointerException中,如果传递的日期为空,则该方法返回 a :

SimpleDateFormat.format()

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

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

检查statusRecoTime != null不是必需的,因为如果null.

于 2017-05-03T07:54:13.287 回答
0

我假设sdf是一个SimpleDateFormat实例。

首先要检查的是文档,正如 Mistalis 已经在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而不是某个本土或第三方子类,我们可以排除这种可能性。

于 2017-05-03T08:20:33.767 回答
0

不,您在这里不需要任何空值检查,就好像sdf将无法格式化它会抛出错误而不是空值的时间。尽管如果您在sdf中定义了正确的格式,那么您正在格式化日历异常的时间也不会出现。

于 2017-05-03T07:51:35.103 回答
0

假设那sdf是一个SimpleDateFormat实例,format将永远不会返回nullnull检查是完全没有必要的。

这里的各种答案都与该代码是否会引发异常有关。唯一的情况是 ifsdfcalwere null。但是假设两者都是 non-null并且cal是 a Calendar,则该代码不会引发异常。

于 2017-05-03T07:52:07.103 回答