首頁  >  文章  >  Java  >  為什麼三元運算子中傳回 Null 會導致 NullPointerException,而 If 語句中會出現編譯時錯誤?

為什麼三元運算子中傳回 Null 會導致 NullPointerException,而 If 語句中會出現編譯時錯誤?

Barbara Streisand
Barbara Streisand原創
2024-11-05 07:30:02948瀏覽

Why Does a Null Return Cause a NullPointerException in a Ternary Operator but a Compile-Time Error in an If Statement?

三元運算子與If 語句中的空回傳

考慮下列Java 程式碼片段:

<code class="java">public class Main {

    private int temp() {
        return true ? null : 0;
    }

    private int same() {
        if (true) {
            return null;
        } else {
            return 0;
        }
    }

    public static void main(String[] args) {
        Main m = new Main();
        System.out.println(m.temp());
        System.out.println(m.same());
    }
}</code>

考慮以下Java 程式碼片段:

In temp() 方法,三元運算子true ? null : 0 檢查 true 是否為 true 並傳回 null,否則傳回 0。儘管該方法的傳回類型是 int,但編譯器允許傳回 null。然而,在運行程式碼時,拋出了 NullPointerException。 在 same() 方法中,if 語句在 true 為 true 時嘗試傳回 null,但由於傳回不相容,編譯器報告編譯時錯誤

為什麼有差別?

主要差異在於編譯器如何解釋三元運算子和 if 語句中的 null。在三元運算子中,null 被視為對 Integer 物件的 null 參考。在自動裝箱和拆箱規則(Java 語言規範,15.25)下,null 會透過拆箱自動轉換為 int,從而在使用 int 時導致 NullPointerException。 相較之下,if 語句明確檢查表達式的真實性 true 並嘗試傳回 null,這與宣告的 int 傳回型別不相容。因此,編譯器會產生編譯時錯誤以防止錯誤的程式碼執行。

以上是為什麼三元運算子中傳回 Null 會導致 NullPointerException,而 If 語句中會出現編譯時錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn