什么是最有效的;创建新实例或更改现有实例中的值?

时间:2014-01-30 18:38:45

标签: java

我正在尝试编写一个跟踪电影的应用程序,以此来改善Java。为此,我为电影本身使用了一个“电影”类,并且通过“电影”构造函数设置了诸如“标题”,“年”,“导演”等类,以满足您的期望。现在说我想改变一部电影导演,从“电影”课程中这样做最有效的方法是什么?我将其归结为创建新实例或更改旧实例,即

public void setYear(int year) {
    this.year = new Year(year);
}

public void setYear(int year) {
    this.year.setYear(year);
}

最重要的是,我只是不确定第二个是否是正确的编码实践?

我刚刚开始学习Java,所以我为我的问题中的任何混淆道歉。

4 个答案:

答案 0 :(得分:6)

与大多数表演问题一样,最好的答案是;首先担心简单,清晰的编码,它通常会表现得很好。如果您已经测量到您有疑虑,那么只会担心性能问题,否则您只是在猜测(即使您有十年的Java应用程序调优经验)

第一个例子是最简单的,也可能是最清晰的,但我不确定为什么你有一个Year课,因为你很乐意传递int一年。第二种是更快,但可能更容易出错。

如果您只想提高效率,请使用int

最佳做法可能是将Year用作不可变的地方,例如。

public void setYear(Year year) {
    this.year = year;
}

例如,JodaTime有各种不可变类来表示不同的时间段。

答案 1 :(得分:2)

用Don Knuth的话来说,“......过早的优化是所有邪恶的根源”

根据你的例子,第一个是最清楚的。我会那样做。

答案 2 :(得分:0)

两者都不是:

典型的方法是

public void setYear(int year) {
    this.year = year;
}

您通常不需要上课年级。

但是你应该考虑班级的观众:你需要检查有效的一年, 或者你相信来电者。

从记忆和速度表现来看,直接设置效率更高,尽管你很可能永远不会感觉到差异。

答案 3 :(得分:-1)

分配对象总是很昂贵。但是,为对象赋值(复制)也可能很昂贵,但通常不那么昂贵。如果您希望经常调用代码并且性能是个问题,那么请考虑复制。否则,做任何最容易阅读和写作的事情。