什么是最便宜的Java Joda DateTime更新方法?

时间:2015-02-26 15:46:46

标签: java performance datetime jodatime

我希望更新DateTime对象的时间。我注意到有两种不同的方法来创建具有更新时间的DateTime对象的副本,但我不确定要使用哪种方法。

使用其中一个优势是否有优势?

import org.joda.time.DateTime;

DateTime oldTime = DateTime.now()
newTime = oldTime.withMinuteOfHour(30)

import org.joda.time.DateTime;

DateTime oldTime = DateTime.now()
newTime = oldTime.minuteOfHour.setCopy(30)

2 个答案:

答案 0 :(得分:2)

谈论性能 - 我真的不太感兴趣,因为这3行几乎永远不会成为你的应用程序的瓶颈,除非你正在处理一个极端内存密集型应用程序,其中一个额外的对象可能是一个交易。 (只是你知道,我去了源代码,发现,第二种方法创建了一个额外的Property对象)

谈论可读性 - 当然我会选择第一个。因为我要去API看看setCopy()做了什么。第一个清楚地显示了意图,即请求一个新的DateTime对象,并将minuteOfHour设置为传递的值。

这是我不喜欢第二种方法的另一个原因。 minuteOfHour()方法返回Property

Property minuteOfHour = date.minuteOfHour();

现在可以将属性分配给date的任何属性。我可以稍后再做:

minuteOfHour = date.dayOfYear();

那会编译,但是在不实际更改名称的情况下更改变量的含义。这意味着,当您致电时,您不会真正知道自己要设置的属性:Property#setCopy()

答案 1 :(得分:1)

它们可能大致相同 - 这是withMinuteOfHour的源代码 -

public DateTime withMinuteOfHour(int minute) {
        return withMillis(getChronology().minuteOfHour().set(getMillis(), minute));
}

虽然minuteOfHour是 -

public Property minuteOfHour() {
            return new Property(this, getChronology().minuteOfHour());
}

所以调用的核心是相同的