Почему троичная операция дает nullpointer, а его ifelse-аналог - нет? [Дубликат]

На этот вопрос уже есть ответ здесь:

Булевы, условные операторы и автобокс 4 ответа

Я получаю NullPointerException в одном экземпляре ниже, в то время как его коллега работает гладко.

public static void main(String[] args){
    System.out.println(withTernary(null, null)); //Null Pointer
    System.out.println(withIfElse(null, null));  //No Exception
}

private static Boolean withTernary(String val, Boolean defVal){
    return val == null ? defVal : "true".equalsIgnoreCase(val);
}

private static Boolean withIfElse(String val, Boolean defVal){
    if (val == null) return defVal;
    else return "true".equalsIgnoreCase(val);
}

Онлайн версия

Онлайн версия со строками вmain обратнаякакие выводыnull отwithIfElse а затем терпит неудачу вwithTernary.

Я использую следующую версию Java

java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)