Kilka dni temu natknąłem się na fascynujący scenariusz, w którym nie mogłem znaleźć żadnej dokumentacji dotyczącej tego, jak i dlaczego Java pozwala na następujące zdarzenia. (Ten fragment kodu jest tylko uproszczoną formą błędu).
@Test
public void test() {
boolean bool = false;
Integer intVal = Integer.valueOf(5);
Long longVal = null;
Long result = bool ? intVal : longVal;
System.out.println(" > " + result);
}
we fragmencie powyżej:
jeśli bool = true, to otrzymujesz wartość „5”;
ale jeśli bool = false, wówczas podczas próby oceny operacji trójkowej pojawia się wyjątek wskaźnika zerowego. NIE instrukcja drukowania.
Aby to naprawić, po prostu zmieniam „wynik” na
Long result = bool ? Long.valueOf(intVal) : longVal;
Dzięki temu uzyskasz oczekiwane zachowanie, którego potrzebowałem:
jeśli bool = true, to otrzymujesz wartość „5”;
ale jeśli bool = false, to dostajesz „null”
teraz zabawne jest to, że jeśli podzielisz to na normalną instrukcję if / else, wówczas Java nie pozwala na kompilację
longVal = intVal;
ale nie łapie tego za pośrednictwem operatora trójskładnikowego. Co więc robi Java, aby w oryginalnym fragmencie była zerowa?
(java 11)