java - Map.get() 中的优化? : ternary operator

标签 java optimization dictionary compiler-optimization

考虑以下代码:

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/

相关文章:

ios - 在用户输入地址 UITextField 时显示可能的条目

现在流行的java管理客户端

java - 在 equals() 方法中比较 double 的正确方法

java - 使用 Java 8 Stream 打印修改后的列表值

javascript - 有效地减少时间受限任务之间的等待时间

c++ - 调用 std::map::find 时出现 "map/set iterators incompatible"

java - 给定算法分析的"main"java.lang.StackOverflowError

python - 需要一个测试用例,其中给定的最小硬币数量代码在 python 中失败了吗?

c++ - 在 Release模式下编译时,大量嵌套循环会导致链接器无休止地运行吗?

python - 如何将索引添加到字典中