Ternary Operator vs. if Penyata untuk Null Return of int
Di Java, ternary operator (?:) membenarkan penugasan null kepada pembolehubah jenis int, walaupun int ialah jenis data primitif yang tidak menyokong nilai nol. Pertimbangkan coretan kod berikut:
<code class="java">int temp() { return true ? null : 0; }</code>
Dalam kod ini, pengendali ternary memberikan null kepada temp pembolehubah jika benar ialah syarat yang dinilai, jika tidak ia memberikan 0. Pengkompil membenarkan tugasan ini tanpa mengeluarkan sebarang ralat. Walau bagaimanapun, apabila kaedah itu dilaksanakan, ia akan membuang NullPointerException pada masa jalan kerana null bukan nilai yang sah untuk int.
Berbeza dengan pengendali ternary, pernyataan if tidak membenarkan penetapan nol tersebut kepada pembolehubah jenis primitif. Contohnya:
<code class="java">int same() { if (true) { return null; } else { return 0; } }</code>
Kod ini akan menjana ralat masa kompilasi dengan mesej "jenis tidak serasi: null tidak boleh ditukar kepada int." Sebab percanggahan ini terletak pada cara pengkompil melayan nilai nol.
Dalam kes pengendali ternary, pengkompil mentafsir literal nol sebagai rujukan nol kepada Integer, kelas pembalut untuk int. Ini disebabkan oleh peraturan pengkompil untuk autoboxing dan unboxing: apabila menukar daripada jenis primitif kepada jenis objek, Java Virtual Machine (JVM) secara automatik membalut nilai primitif dalam pembalut objek yang sepadan.
Memandangkan int ialah jenis primitif, pengkompil akan cuba menyahkotak nilai nol yang dikembalikan oleh pengendali ternary, yang menghasilkan NullPointerException.
Sebaliknya, pernyataan if tidak melakukan proses nyah kotak ini dan literal nol kekal sebagai rujukan nol kepada Object. Memandangkan jenis pulangan kaedah same() ialah int, pengkompil tidak boleh menukar rujukan nol kepada int, maka ralat masa kompilasi.
Atas ialah kandungan terperinci Mengapa Pengendali Ternary Membenarkan Pengembalian Null untuk int Manakala Pernyataan if Tidak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!