Rumah >Java >javaTutorial >Mengapa Pengendali Ternary Boleh Mengembalikan Null dalam Kaedah Int, Tetapi Pernyataan Jika Tidak Boleh?

Mengapa Pengendali Ternary Boleh Mengembalikan Null dalam Kaedah Int, Tetapi Pernyataan Jika Tidak Boleh?

DDD
DDDasal
2024-11-05 22:12:02859semak imbas

Why Can a Ternary Operator Return Null in an Int Method, But an If Statement Can't?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn