我正在尝试编写一个跟踪电影的应用程序,以此来改善Java。为此,我为电影本身使用了一个“电影”类,并且通过“电影”构造函数设置了诸如“标题”,“年”,“导演”等类,以满足您的期望。现在说我想改变一部电影导演,从“电影”课程中这样做最有效的方法是什么?我将其归结为创建新实例或更改旧实例,即
public void setYear(int year) {
this.year = new Year(year);
}
或
public void setYear(int year) {
this.year.setYear(year);
}
最重要的是,我只是不确定第二个是否是正确的编码实践?
我刚刚开始学习Java,所以我为我的问题中的任何混淆道歉。
答案 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)
分配对象总是很昂贵。但是,为对象赋值(复制)也可能很昂贵,但通常不那么昂贵。如果您希望经常调用代码并且性能是个问题,那么请考虑复制。否则,做任何最容易阅读和写作的事情。