Когда я пишу свой код Java следующим образом:
Map<String, Long> map = new HashMap<>()
Long number =null;
if(map == null)
number = (long) 0;
else
number = map.get("non-existent key");
приложение работает так, как ожидалось, но когда я это делаю:
Map<String, Long> map = new HashMap<>();
Long number= (map == null) ? (long)0 : map.get("non-existent key");
Я получаю исключение NullPointerException во второй строке. Указатель отладки перескакивает со второй строки на этот метод в классе java.lang.Thread:
/**
* Dispatch an uncaught exception to the handler. This method is
* intended to be called only by the JVM.
*/
private void dispatchUncaughtException(Throwable e) {
getUncaughtExceptionHandler().uncaughtException(this, e);
}
Что здесь происходит? Оба эти пути кода в точности эквивалентны, не так ли?
Edit
Я использую Java 1.7 U25