Pertimbangkan coretan kod Java berikut:
<code class="java">public class Main { private int temp() { return true ? null : 0; // No compiler error } private int same() { if (true) { return null; // Compile-time error } else { return 0; } } public static void main(String[] args) { Main m = new Main(); System.out.println(m.temp()); System.out.println(m.same()); } }</code>
Soalan: Mengapakah kaedah temp() (menggunakan operator ternary) tidak menghasilkan ralat pengkompil, manakala kaedah yang sama() (menggunakan pernyataan if) melakukannya?
Jawapan: Pengkompil Java mentafsir null sebagai rujukan nol kepada Integer. Apabila menggunakan operator bersyarat, peraturan autoboxing/nyahboxing digunakan (mengikut Spesifikasi Bahasa Java, 15.25). Ini membenarkan pengkompil untuk meneruskan tanpa mengeluarkan ralat, walaupun NullPointerException akan dilemparkan pada masa larian.
Sebaliknya, apabila menggunakan pernyataan if, pengkompil menggunakan peraturan semakan jenis standard. Memandangkan null bukan nilai int yang sah, ralat masa kompilasi dihasilkan.
Atas ialah kandungan terperinci Mengapa Pengendali Ternary Membenarkan Null Manakala Pernyataan Jika Tidak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!