Enigma Operator Bersyarat: Pulangan Null dalam Pernyataan Ternary vs. If
Di Java, operator bersyarat (ternari) menimbulkan teka-teki yang menarik apabila berurusan dengan jenis pulangan kaedah. Pertimbangkan kod berikut:
<code class="java">public class Main { private int temp() { return true ? null : 0; // Compiler allows null return for int method } private int same() { if (true) { return null; // Compiler error: incompatible types } else { return 0; } } }</code>
Dalam kaedah temp(), pengendali ternary membenarkan pengembalian null walaupun kaedah diisytiharkan untuk mengembalikan int. Tingkah laku yang kelihatan berlawanan dengan intuisi ini dijelaskan oleh tafsiran pengkompil tentang null sebagai rujukan nol kepada objek Integer. Ia kemudian menggunakan peraturan autoboxing/nyah kotak untuk pengendali bersyarat, menyebabkan objek Integer dikembalikan. Walau bagaimanapun, tindakan ini menutup kemungkinan masa jalan NullPointerException.
Sebaliknya, percubaan untuk mewakili pengendali ternary sebagai pernyataan if dalam kaedah yang sama() mencetuskan ralat masa kompilasi disebabkan jenis yang tidak serasi. Ini kerana pernyataan if tidak membenarkan kami mengembalikan null untuk kaedah int-returning.
Inti teka-teki terletak pada perbezaan antara operator ternary dan pernyataan if. Pengendali ternary membenarkan kami mengembalikan nilai berdasarkan syarat, manakala pernyataan if memerlukan kami untuk menyatakan secara eksplisit jenis pulangan. Oleh itu, pengendali ternary boleh menyelinap pulangan null ke dalam kaedah int jika kita tidak berhati-hati, manakala pernyataan if menguatkuasakan semakan jenis yang memastikan nilai yang dikembalikan adalah serasi dengan tandatangan kaedah.
Atas ialah kandungan terperinci Mengapa Pengendali Ternary Boleh Mengembalikan Null dalam Kaedah Int, Tetapi Pernyataan Jika Tidak Boleh?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!