5

我有以下场景..我多次遇到类似的场景。以下两个选项哪个更可取?

选项1:

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

选项 2:

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

哪个更可取和/或更好的做法。?

4

5 回答 5

4

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

于 2013-07-12T11:06:41.283 回答
3

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

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

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

于 2013-07-12T11:13:56.517 回答
1

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

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

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

于 2013-07-12T11:15:11.523 回答
1

选项2:更好

选项 1:导致额外的方法调用,除非是 getter 方法(返回某些内容的单行方法),否则应始终避免这种情况getDetails(...)

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

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

这是许多开销中的几个。正如许多人所说,这种性能优化应该留给编译器,代码应该写得更易读。

于 2013-07-12T11:15:51.653 回答
0

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

于 2013-07-12T12:06:18.223 回答