4

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

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

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

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

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

4

4 回答 4

3

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

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

于 2013-04-17T05:10:09.660 回答
3

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

编辑:

根据评论详细说明我的答案。在堆上创建一个对象,但对该对象的所有引用都转到线程堆栈。

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

编辑:

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

于 2013-04-17T05:01:57.507 回答
1

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

对性能没有太大影响,但仍然养成不创建无用变量的习惯。

有人说一旦超出范围就会被GC,但据我了解,GC运行的时间没有固定的时间,你不能强制它运行。所以它会一直留在内存中,直到下次 GC 运行。

于 2013-04-17T05:27:10.937 回答
0

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

#2 样式是多余且不必要的,但没什么大不了的。

于 2013-04-17T05:37:47.190 回答