返回值的公约是什么?

时间:2013-04-17 04:59:25

标签: java coding-style conventions

我在我的应用程序中编写了以下代码。 (办公室工作)

@Override
public List<Outlet> getAllOutletForTouch() {
    return outletDao.getOutlets();
}

这是我的一位同事写的代码。

@Override
public List<Outlet> getAllOutletsForMobile() {
    List<Outlet> outletList = outletDao.getOutlets();
    return outletList;
}

他创建了一个新变量,分配了值,然后返回了值;而我只是直接调用该方法返回值。这样做的惯例是什么?

4 个答案:

答案 0 :(得分:3)

在你的情况下我更喜欢第一个。你在第二种情况下不必要地创建一个新的引用,它会占用一些占用一些内存的线程堆栈。 所以我会先做。

编辑:

根据评论阐述我的答案。在堆上创建一个对象,但对该对象的所有引用都转到Thread Stack。

因此,如果多个线程引用相同的对象,那么它们将在堆栈中存储它们自己的引用。

编辑:

检查链接Where is allocated variable reference, in stack or in the heap?以获取有关如何存储参考的详细信息

答案 1 :(得分:3)

因此,与第一选项相比,第二选项没有相当大的性能差异,即使是大规模,因为一旦引用超出范围,它将被GCed。

但它主要是关于编码风格。 IMO和@Luiggi在评论中说,第一个选项更具可读性,但不允许您在返回时进行调试。如果return语句可能抛出您可能想要调试的异常,则需要使用第二个选项。

答案 2 :(得分:1)

我认为第一个(直接返回而不创建变量)更好,因为如果它们没用,我们应该总是避免创建变量。

没有太多的性能影响,但仍然没有创建无用的变量。

有人说它会在超出范围时立即进行GCed但根据我的理解,当GC运行并且你不能强制它运行时没有固定的时间。所以它会留在内存中,直到GC下次运行。

答案 3 :(得分:0)

#2没有性能损失。如果执行得足够频繁,VM将负责优化它。

#2风格是多余的,没有必要,但没什么大不了的。