为什么simpleDateFormat.format(null)会报空指针异常

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)方法时,请做非空判断,或异常处理。
 

猜你喜欢

转载自blog.csdn.net/zdb292034/article/details/84317129