ホームページ  >  記事  >  Java  >  if ステートメントでは null が許可されないのに、三項演算子では null が許可されるのはなぜですか?

if ステートメントでは null が許可されないのに、三項演算子では null が許可されるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-04 18:04:01851ブラウズ

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

Java の NullPointerException: 三項演算子と If ステートメント

次の Java コード スニペットを考えてみましょう:

<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>

質問: temp() メソッド (三項演算子を使用) ではコンパイラ エラーが発生しないのに、same() メソッド (if ステートメントを使用) ではコンパイラ エラーが発生するのはなぜですか?

答え: Java コンパイラは、null を整数への null 参照として解釈します。条件演算子を使用する場合、オートボックス化/アンボックス化ルールが適用されます (Java 言語仕様 15.25 に従って)。これにより、実行時に NullPointerException がスローされる場合でも、コンパイラーはエラーを発行せずに続行できます。

対照的に、if ステートメントを使用する場合、コンパイラーは標準の型検査ルールを適用します。 null は有効な int 値ではないため、コンパイル時エラーが生成されます。

以上がif ステートメントでは null が許可されないのに、三項演算子では null が許可されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。