Bagian kode ini berfungsi dengan baik: -
Integer nullInt = null;
if (1 <= 3) {
Integer secondNull = nullInt;
} else {
Integer secondNull = -1;
}
System.out.println("done");
Tapi ini melempar pengecualian null-pointer, sementara Eclipse memperingatkan bahwa ada kebutuhan untuk membuka kotak secara otomatis: -
Integer nullInt = null;
Integer secondNull = 1 <= 3 ? nullInt : -1;
System.out.println("done");
Mengapa begitu, bisakah seseorang membimbing?
java
if-statement
conditional-operator
91StarSky
sumber
sumber
Saya cukup yakin bahwa argumen untuk operator ternary harus dari jenis yang sama. Karena Anda menggunakan -1 dan beberapa
nullint
kompiler konstan mencoba membuka kotaknullint
untuk mendapatkan nilai. Dan kemudian autobox untuk menyimpannya dalamsecondNull
variabel.sumber
Ini karena ketika dua operan untuk operator kondisional
? :
adalah tipe primitif dan tipe referensi kemasnya , konversi unboxing dilakukan ( JLS §15.25.2 ):Secara umum, mengganti
if
pernyataan dengan? :
ekspresi tidak selalu mempertahankan makna kode, karena? :
ekspresi itu sendiri harus memiliki tipe waktu kompilasi. Itu berarti ketika jenis kedua operan berbeda, konversi harus dilakukan untuk satu atau keduanya sehingga hasilnya memiliki tipe waktu kompilasi yang konsisten.sumber
Yang ini berhasil (di Jawa 1.8):
sumber