Rumah  >  Artikel  >  Java  >  Mengapa Pengendali Ternary Membenarkan Null Manakala Pernyataan Jika Tidak?

Mengapa Pengendali Ternary Membenarkan Null Manakala Pernyataan Jika Tidak?

Linda Hamilton
Linda Hamiltonasal
2024-11-04 18:04:01812semak imbas

Why Does the Ternary Operator Allow Null While the If Statement Does Not?

NullPointerException dalam Java: Operator Ternary vs. If Statement

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!

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