当我像这样编写我的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);
}
这里发生了什么?这两个代码路径是完全等价的,不是吗?
编辑
我正在使用 Java 1.7 U25