Java 返回值的约定是什么?

Java 返回值的约定是什么?,java,coding-style,conventions,Java,Coding Style,Conventions,我在应用程序中编写了以下代码。(办公室工作) @覆盖 公共列表getAllOutletForTouch(){ 返回outletDao.getOutlets(); } 这是我的一位同事写的代码 @Override public List<Outlet> getAllOutletsForMobile() { List<Outlet> outletList = outletDao.getOutlets(); return outletList; } @覆盖

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

@覆盖
公共列表getAllOutletForTouch(){
返回outletDao.getOutlets();
}
这是我的一位同事写的代码

@Override
public List<Outlet> getAllOutletsForMobile() {
    List<Outlet> outletList = outletDao.getOutlets();
    return outletList;
}
@覆盖
公共列表getAllOutletsForMobile(){
List-outletList=outletDao.getOutlets();
返回输出列表;
}

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

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

编辑:

根据评论详细阐述我的答案。在堆上创建了一个对象,但对该对象的所有引用都进入线程堆栈

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

编辑:


查看链接,了解如何存储引用的详细信息。因此,与第一个选项相比,第二个选项的性能没有显著差异,即使是在大规模情况下,因为一旦引用超出范围,就会进行GCed

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

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

虽然没有太多的性能损失,但仍然可以练习不创建无用的变量


有人说,一旦它超出范围,它就会被GCed,但根据我的理解,GC运行没有固定的时间,你不能强迫它运行。因此,它将保留在内存中,直到下次GC运行。

对于#2没有性能损失。如果执行频率足够高,VM将负责对其进行优化


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

只要你是一致的,你使用哪一个都不重要,我认为。一致性是我最大的问题。第一种方法只会节省
outletList
引用所消耗的内存。这不是优化,只是代码样式。对于可读性,也是一样的。对于可调试性,我会选择第二个。@codeMan你能证明你说的吗?@DimalChandrasiri:-下一票。。这个问题值得一提。更好的方法是直接返回值-1:你真的能证明你在第二种情况下占用了内存吗?我没有看到任何生成的字节码证明你的理论。@Luigi:“outletList”将存储在哪里?它必须去线程堆栈。@Luigi:是的,我是。对象存储在没有引用的堆上。你认为推荐信存放在哪里?@Luiggi:没有什么真正需要证明的。我刚刚陈述了一个关于java的理论事实,即引用进入堆栈。这有误导性吗?不确定。检查这个链接:这里的outletDao.getOutlets()只返回一个没有参数的出口列表,所以我认为这段代码不会有任何异常。!如果outletDao为null,或者getOutlets抛出任何未捕获的异常,该怎么办?同意。但是,如果您开始在方法内部创建大量局部变量,那么它可能会降低性能,因为垃圾收集会花费更多的时间,堆栈内存将被占用更多。outletDao在类级别调用它之前已初始化,因此它是否有可能为null?此外,getOultets是一种使用hibernate与数据库通信的方法。异常在方法内部处理!洛基:首先,GC是更适用于对象的术语,因为变量占用的内存一旦超出范围就会被释放@DimalChandrasiri我还没有看到完整的代码,我只是指出了可能性,如果您确定它不会抛出任何异常,那么它不应该抛出任何异常。
@Override
public List<Outlet> getAllOutletsForMobile() {
    List<Outlet> outletList = outletDao.getOutlets();
    return outletList;
}