Birkaç gün önce, Java'nın aşağıdakilerin nasıl veya neden gerçekleştiğine dair herhangi bir belge bulamadığım büyüleyici bir senaryo ile karşılaştım. (Bu snippet, hatanın basitleştirilmiş bir şeklidir.)
@Test
public void test() {
boolean bool = false;
Integer intVal = Integer.valueOf(5);
Long longVal = null;
Long result = bool ? intVal : longVal;
System.out.println(" > " + result);
}
yukarıdaki kod parçasında:
bool = true ise, '5' değerini alırsınız;
ancak bool = false ise, üçlü işlemi değerlendirmeye çalışırken boş bir işaretçi istisnası alırsınız. Baskı ifadesi DEĞİL.
Bunu düzeltmek için sadece 'sonucu' değiştiriyorum
Long result = bool ? Long.valueOf(intVal) : longVal;
Bunu yapmak, ihtiyacım olan beklenen davranışı verecektir:
bool = true ise, '5' değerini alırsınız;
ama bool = false olursa, o zaman 'null' alırsınız
şimdi eğlenceli kısmı, eğer bu normal bir if / else deyimine bölerseniz, java derlemenize izin vermez
longVal = intVal;
ancak üçlü operatör üzerinden bunu yakalamaz. Peki, orijinal snippet'te null noktasını göstermek için Java ne yapıyor?
(java 11)