Otrzymuję NullPointerException w jednym przykładzie poniżej, podczas gdy jego odpowiednik działa gładko.Dlaczego Ternary Operacja daje nullpointer, gdy jego odpowiednik ifelse nie?
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);
}
Online version with the lines in main
reversed, który wyprowadza null
z withIfElse
i nie w withTernary
.
Używam następujących wersji 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)
To jest duplikatem. – Raedwald
@Raedwald: Z czego? Dlaczego nie oznaczyć go jako takiego? –
To jest naprawdę cholernie mylące. To bardzo ważna sprawa w JLS ... – nneonneo