Beberapa hari yang lalu, saya mengalami skenario yang menarik bahwa saya tidak dapat menemukan dokumentasi tentang bagaimana atau mengapa Java memungkinkan hal berikut terjadi. (Cuplikan ini hanyalah bentuk bug yang disederhanakan.)
@Test
public void test() {
boolean bool = false;
Integer intVal = Integer.valueOf(5);
Long longVal = null;
Long result = bool ? intVal : longVal;
System.out.println(" > " + result);
}
dalam cuplikan di atas:
jika bool = true, maka Anda mendapatkan nilai '5';
tetapi jika bool = false, maka Anda mendapatkan pengecualian pointer nol ketika mencoba mengevaluasi operasi ternary. BUKAN pernyataan cetak.
Untuk memperbaiki ini saya hanya mengubah 'hasil' menjadi
Long result = bool ? Long.valueOf(intVal) : longVal;
Melakukan ini, akan memberikan perilaku yang diharapkan yang saya butuhkan:
jika bool = true, maka Anda mendapatkan nilai '5';
tetapi jika bool = false, maka Anda mendapatkan 'null'
sekarang bagian yang menyenangkan adalah jika Anda membaginya menjadi pernyataan if / else normal, maka java TIDAK membiarkan Anda mengkompilasi
longVal = intVal;
tetapi tidak menangkapnya melalui operator ternary. Jadi apa yang dilakukan Java untuk menjadikannya titik nol di cuplikan asli?
(java 11)