このコードはどのようにコンパイルされますか?コンパイラが「型の不一致:nullからbooleanに変換できません」と不平を言うことを期待していましたが、そうではありません。実行時にNullPointerExceptionで失敗します。返り値が3値演算子を使用するとき、どのようにしてブール値を返すメソッドがコンパイルされるのでしょうか?
public static void main(String[] args) throws Exception {
System.out.println("this throws a NPE: " + whyIsThisPossible(1, 2));
}
private static boolean whyIsThisPossible(int a, int b) {
return a + b == 2 ? true : null;
}
Exception in thread "main" java.lang.NullPointerException
at FunkyMethodTest.whyIsThisPossible(FunkyMethodTest.java:10)
at FunkyMethodTest.main(FunkyMethodTest.java:5)*