考慮下面的代碼: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