我有以下情况......我偶尔会遇到类似情况。哪个更适合以下两个选项?
选项-1:
String result = ( getDetails(...) == null ) ? "" : getDetails(...);
选项-2:
String returnValue = getDetails(...);
String result = ( returnValue == null ) ? "" : returnValue;
哪个更优选和/或更好的做法。?
答案 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更多地占用部分。