Map.get() optimization in ?: ternary operator

后端 未结 3 875
礼貌的吻别
礼貌的吻别 2021-01-22 10:33

Consider the following code:

java.util.Map map = new java.util.HashMap();
...
String key = \"A\";
String value = map.         


        
相关标签:
3条回答
  • 2021-01-22 11:07

    The IF one is preferable.

    Its more readable & self explained.

    Additionally: execution time is not a big deal, at least here.

    0 讨论(0)
  • 2021-01-22 11:10

    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.

    0 讨论(0)
  • 2021-01-22 11:17

    Your second option which is :

    String value = map.get(key);
    if(value == null) {
        value = "DEFAULT_VALUE";
    }
    

    is better from first one reason:

    1. You dont create an extra reference "tmp"

    2. You dont execute else which you do as part of your ternary comparison.

    0 讨论(0)
提交回复
热议问题