考虑下面的代码: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";
) ?
我亲自做后者。它没有太大的区别,但是我认为后者获胜的可读性通常会更好。 (你也不会相信我遇到的人数不知道三元运算符是干什么的,所以一般情况下最好避免,除非它很清楚)。 – Thor84no 2011-12-14 14:45:31
为了执行该优化,优化器必须知道`map.get(key)`每次调用时都会返回相同的值(不需要对`map`或`key`进行任何干预更改)。 – Gabe 2011-12-14 14:46:14
编译器几乎没有优化,JIT会。此外,我总是赞成澄清微观优化。 – helpermethod 2011-12-14 14:48:36