Не уверен, если вы спрашиваете, что соответствует тому, что компилятор сделает из исходного выражения, и в этом случае ответ будет:
Ни то, ни другое -
В примере, который вы вызываетеmap.get () дважды;компилятор не может знать, что побочных эффектов нет, поэтому он вызовет его дважды, когда будет найдено значение.
Возможно, ближайший к
String tmp = map.get(key);
String value;
if (tmp == null)
value= "DEFAULT_VALUE";
else
value = map.get(key);
Или если вы спрашиваете, какая альтернативанаиболее эффективен, и в этом случае ответ:
Второй вариант, вероятно, немного лучше, потому что он не требует дополнительной локальной переменной.Дополнительная локальная переменная накладывает небольшие издержки на JVM, но, вероятно, она ничего не даст во время выполнения, как только JIT справится с этим.