Consider the following code:
java.util.Map<String, String> map = new java.util.HashMap<String, String>();
...
String key = "A";
String value = map.get(key) == null? "DEFAULT_VALUE" : map.get(key); // (1)
Would the compiler optimize the line (1) something similar to:
String tmp = map.get(key);
String value = tmp == null? "DEFAULT_VALUE" : tmp;
(or to:
String value = map.get(key);
if(value == null) value = "DEFAULT_VALUE";
) ?
Not sure if you are asking which corresponds to what the compiler will make of the original expression, in which case the answer is:
Neither--
In the example you are calling map.get() twice; the compiler can't know that there are no side effects, so it will call it twice when a value is found.
Probably closest to
String tmp = map.get(key);
String value;
if (tmp == null)
value= "DEFAULT_VALUE";
else
value = map.get(key);
Or if you are asking which alternative is most efficient, in which case the answer is:
The second alternative is probably slightly better because it does not require an additional local variable. An additional local variable imposes a slight overhead on the JVM, but it will probably amount to nothing at runtime once the JIT gets through with it.
Your second option which is :
String value = map.get(key);
if(value == null) {
value = "DEFAULT_VALUE";
}
is better from first one reason:
You dont create an extra reference "tmp"
You dont execute else which you do as part of your ternary comparison.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With