在调用函数两次并将返回值存储在变量中之间选择哪一个?

时间:2013-07-12 11:03:46

标签: java optimization

我有以下情况......我偶尔会遇到类似情况。哪个更适合以下两个选项?

选项-1:

String result = ( getDetails(...) == null ) ? "" : getDetails(...);

选项-2:

String returnValue = getDetails(...);
String result = ( returnValue == null ) ? "" : returnValue;

哪个更优选和/或更好的做法。?

5 个答案:

答案 0 :(得分:3)

Imho 第二个更好,因为它避免两次调用getDetails(...)方法。

答案 1 :(得分:2)

如果必须对getDetails的每次调用进行检查,那么在返回null的情况下,最好的方法是getDetails方法返回""

同样调用相同的方法两次(在你的情况下可能是幂等的)即使它非常简单也不是一个好习惯。

请阅读java-how-expensive-is-a-method-call。主要的想法是不要过早优化,但是当你可以编写更好的代码时,你应该习惯这些简单的情况

答案 2 :(得分:1)

我更喜欢第二个选项,因为它更具可读性,尤其是在使用三元运算符时。

如果问题与否,请致电getDetails(...)两次取决于您的方法。如果它是一个简单的getter,JVM可能会优化调用并直接使用该值,因此将其存储在局部变量中并没有什么区别。
如果它是一种更复杂的方法,例如对数据库的查询,我肯定会将结果存储在局部变量中。

一般来说:首先关注代码可读性!如果您稍后发现性能问题,请尝试优化。

答案 3 :(得分:1)

选项-2:更好

选项-1:导致额外的方法调用,并且此类情况应始终避免,除非getDetails(...)是一个getter方法(一个单行方法返回东西)

如果深入研究微观优化,方法调用通常会导致

  • 为方法变量分配堆栈
  • 跳过指令集

这是很多开销。 As many say,这样的性能优化应留给编译器,代码应该写得更具可读性。

答案 4 :(得分:0)

选项-2将始终优化为您在调用函数中编写的内容。 即使您正在编写任何内置函数或表达式两次,它也会比选项2更多地占用部分。