最近、次の2つのコードスニペットを実行しようとしましたが、出力に驚いていました。短絡ブール式では、アンボックスはどのように機能しますか?
まず:
// ...
System.out.println((Boolean)null || true);
// ...
二次出力に
真
第2の実施の結果:以下の出力で
// ...
System.out.println((Boolean)null || false);
// ...
第1の実施の結果
スレッド "main" javの例外com.blah.mainでa.lang.NullPointerException
(SanityCheck.java:26)
任意短絡が適用されるように私は、両方の実施例は、ヌルポインタ例外が発生しなければならないと考えているだろう左右に。ブール値からブール値を取り除こうとする試みは、論理値の反対側が考慮される前に失敗していたはずです。
誰もこの一貫性のない動作を説明できますか?
この動作は、[JLS](http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.24)と矛盾するように見えます。「実行時には、左-handle演算子の式が最初に評価され、結果にブール型の場合はアンボックス変換されます。 –
SanityCheck.java – arynaq