考虑以下代码:
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 完成它,它在运行时可能就没有什么意义了。
关于java - Map.get() 中的优化? : ternary operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8506303/