创建新对象并将其返回或在return语句中创建新对象更好吗?

时间:2010-02-25 20:50:05

标签: java

例如:

public Person newPerson() {
  Person p = new Person("Bob", "Smith", 1112223333);
  return p;
}

而不是:

public Person newPerson() {
  return new Person("Bob", "Smith", 1112223333);
}

一个比另一个更有效吗?

6 个答案:

答案 0 :(得分:17)

没有任何差别可以让你在性能方面选择其中一个。

  • 为了调试,前者更好 - 即当你想跟踪执行时,或者在创建和返回之间记录一些信息。
  • 为了便于阅读(但这是主观的) - 后者更好。

一般来说,我会为后者提供建议,无论何时需要调试,都要临时切换到第一个(两行)变体。

答案 1 :(得分:8)

在返回之前分配给临时变量使您有机会在newPerson()中进行错误检查和更正。返回新调用需要newPerson()方法的调用者捕获并从错误中恢复。

答案 2 :(得分:1)

没有人比其他人更有效率,JIT会在运行时将其内联到效率最高。

答案 3 :(得分:1)

在一个理智的世界中,它们将编译为完全相同的字节码,因此就性能而言它们是相同的。那么唯一的区别就是人类:

创建临时变量使调试变得更加容易:您可以在return语句上放置断点并检查p的值。在单行版本中,这很难做到。

在一行中执行会消除变量,从而降低复杂性,使代码更容易阅读。

在实践中,我会在一行中编写它,在最坏的情况下,如果我遇到调试问题,我会创建一个临时变量。此外,不是单元测试应该消除调试的需要吗? : - )

答案 4 :(得分:0)

一个并不比另一个效率更高,但直接返回创建的对象可能更清晰,因为您使用的临时变量较少。如果必须使用临时变量,请将其设为final并正确命名。

答案 5 :(得分:0)

第二个选项更短,更容易阅读。

我怀疑任何体面的Java编译器都会为第一个选项创建效率较低的代码。