克隆java.time.LocalDateTime的最佳方法

克隆java.time.LocalDateTime的最佳方法,java,datetime,java-8,Java,Datetime,Java 8,我想创建一个副本java.time.LocalDateTime,但它没有clone()方法 我所做的是: long epochMilli = Instant.now().toEpochMilli(); LocalDateTime createDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault()); LocalDateTime modificationDate = Loc

我想创建一个副本
java.time.LocalDateTime
,但它没有
clone()
方法

我所做的是:

long epochMilli = Instant.now().toEpochMilli();

LocalDateTime createDate =  LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault());

LocalDateTime modificationDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault());

有没有最简单的方法来创建两个日期时间值完全相同的LocalDateTime对象?

因为
LocalDateTime
是不可变的,所以您可以简单地引用相同的对象:

LocalDateTime createDate = LocalDateTime.now();

LocalDateTime modificationDate = createDate;

由于
LocalDateTime
是不可变的,因此没有真正的理由克隆它


您只需使用同一个实例,并传递它,而不必防御性地克隆它并失去性能。

由于它是不可变的,您可以这样做:

LocalDateTime copy = createDate.plusHours(0);
System.out.println(createDate.equals(copy)); // true
:

返回此LocalDateTime的副本,其中包含指定数量的 增加了几个小时。此实例是不可变的,不受此方法的影响 打电话

已编辑: 此代码将从LocalDateTime源返回相同的对象:

public static LocalDateTime from(TemporalAccessor temporal) {
       if (temporal instanceof LocalDateTime) {
          return (LocalDateTime) temporal;
       } 
       ...

为什么要克隆?请记住,由于不变性特性,所有被操纵的实例自然都是新对象。那么您的观点或意图是什么?@Eugene Immutable类被视为值类型,它们的唯一性与它们所持有的值有关,而不是它们在内存中的位置,不需要创建两个单独的实例。由于无法更改
LocalDateTime
实例,因此您可以使用它获得尽可能多的引用。@FilipRistic我不得不同意,我的缺点是:|@FilipRistic但这带来了一个有趣的问题。。。
clone
对值类型比做什么?@Eugene这的确是一个有趣的问题,
clone
按标准应该返回新实例,但并非所有内容都应该是可克隆的。在我看来,值类型永远不应该是可克隆的,因为克隆表示值的东西没有任何用处,因为它们最终会得到相同的值,而这又使它们完全相同。例如,没有人会克隆数字5来获得另一个5,值对象是相同的,它们与它们持有的值绑定,而不是与内存地址绑定。在我的Java 10上,这只是返回了相同的对象,而不是副本。是的,实际上,它返回了相同的对象在我的Java 10上,这只是返回了相同的对象,而不是副本。@OleV.V。我刚刚读了源代码,当增量为0时返回相同的对象。。。
public static LocalDateTime from(TemporalAccessor temporal) {
       if (temporal instanceof LocalDateTime) {
          return (LocalDateTime) temporal;
       } 
       ...