我最近尝试运行以下两个代码片段,并对输出感到惊讶。
第一的:
// ...
System.out.println( (Boolean)null || true );
// ...
第二:
// ...
System.out.println( (Boolean)null || false );
// ...
第一个示例产生以下输出:
true
第二个示例产生以下输出:
com.blah.main(SanityCheck.java:26)
线程“main”java.lang.NullPointerException中的异常
我原以为这两个示例都应该导致空指针异常,因为任何短路都是从左到右应用的。从布尔值拆箱的尝试应该在逻辑的另一端之前失败或被考虑。
谁能解释这种不一致的行为?