SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.format(null);
在第二行会报空指针异常,为什么呢?
我们进入源码看一下就知道了。
第一步
public final String format(Date date)
{
return format(date, new StringBuffer(),
DontCareFieldPosition.INSTANCE).toString();
}
这里date为null,没问题,继续;
第二步
public StringBuffer format(Date date, StringBuffer toAppendTo,
FieldPosition pos)
{
pos.beginIndex = pos.endIndex = 0;
return format(date, toAppendTo, pos.getFieldDelegate());
}
这里date为null也没问题,继续;
第三步
private StringBuffer format(Date date, StringBuffer toAppendTo,
FieldDelegate delegate) {
calendar.setTime(date);
......
}
这里date为null也没问题,进入calendar.setTime看一下;
第四步
public final void setTime(Date date) {
setTimeInMillis(date.getTime());
}
这里date为null,就变成null.getTime(),必然会报空指针异常;
由于空指针异常是运行时异常,编译时不会被检查出来,所以在使用SimpleDateFormat的format(Date date)方法时,请做非空判断,或异常处理。