?中的Map.get()优化:三元运算符

考虑以下代码:

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)

将 优化生产线(1)类似于:

String tmp = map.get(key);

String value = tmp == null? "DEFAULT_VALUE" : tmp;

(或者:

String value = map.get(key);

if(value == null) value = "DEFAULT_VALUE";

)?

回答:

不知道您是否要问哪个对应于编译器将对原始表达式进行的处理,在这种情况下,答案是:

都不-

在示例中,您两次调用map.get();编译器无法知道没有副作用,因此在找到值时它将调用两次。

可能最接近

String tmp = map.get(key);

String value;

if (tmp == null)

value= "DEFAULT_VALUE";

else

value = map.get(key);

或者,如果您要问哪种选择最有效,那么答案是:

第二种选择可能会稍好一些,因为它不需要其他局部变量。附加的局部变量对JVM造成了轻微的开销,但是一旦JIT通过它,它在运行时可能就没有任何意义。

以上是 ?中的Map.get()优化:三元运算符 的全部内容, 来源链接: utcz.com/qa/417784.html

回到顶部