Perché il seguente lancio di una NullPointerException? :NullPointerException nel metodo che restituisce il tipo Oggetto
public static Object myTest() {
boolean x = false;
boolean y = false;
return x && y ? new Object() : x ? x : y ? y : null;
}
public static void main(String [ ] args) {
myTest();
}
so che se faccio una delle seguenti del codice non gettare un NullPointerException:
A)
public static Object myTest() {
boolean x = false;
boolean y = false;
return x && y ? new Object() : x ? x : y ? y : (Object) null;
}
public static void main(String [ ] args) {
myTest();
}
B)
public static Object myTest() {
Boolean x = false;
Boolean y = false;
return x && y ? new Object() : x ? x : y ? y : null;
}
public static void main(String [ ] args) {
myTest();
}
Inoltre, se cambio il cod e completamente e procedere come segue funziona:
public static Object myTest() {
boolean x = false;
boolean y = false;
if(x && y) {
return new Object();
} else if(x) {
return x;
} else if(y) {
return y;
} else {
return null;
}
}
public static void main(String [ ] args) {
myTest();
}
Credo che il compilatore sta facendo una sorta di un'ottimizzazione e in qualche modo rovinare le cose? Suppongo che si tratti di una sorta di problema di trasmissione, ma perché dovrebbe generare una NullPointerException in quel caso anziché una ClassCastException? Qualsiasi informazione sul perché questo sta accadendo sarebbe molto apprezzata!
Grazie in anticipo
sta gettando un NullPointerException perché c'è un puntatore nullo da qualche parte in quel caos immenso. –
Questo è quello che pensavo inizialmente, ma penso che valga la pena guardare, quindi +1 – Bathsheba
@laune, lancia un 'NullPointerException'. –