之前有同事见我还在用Date类处理日期,便嘲笑道:1.8之后有了DateTime类,也可以存储日期,还用Date是不是out了?
最近自己写了些代码,正好想到这个问题,于是就去看了下源码,先说结果,LocalDateTime,LocalDate,LocalTime 为静态类,Date 为动态类,好比与 String 与 StringBuilder 的区别。
LocalDateTime 类使用 LocalDate,LocalTime 类来实现存储时间的功能,而主要存储值用的成员变量都是被final修饰的,源码如下:
可见 date,time 都为final修饰。其实直接看这个类的介绍也可以得知这个结果,第二段就说明了这是一个静态类。
LocalTime源码如下:
LocalDate源码如下:
上面可以看出,LocalDate 与 LocalTime 也是静态类(在其代码介绍里面也有提到)。
而 java.util.Date(区分java.sql.Date)类其本质时利用一个非序列化的long型时间戳来存储日期的,因此其是动态类。
源码如下:
从其构造方法可知,fastTime 既为其存储时间用的变量,其只有一个 transient 修饰,因为其通过实现Serializable类来实现序列化功能,因此 fastTime 在整个 Date 类序列化时,是不会序列化的。