ホームページ >Java >&#&チュートリアル >なぜ三項演算子は int メソッドで Null を返せるのに、if ステートメントでは Null を返せないのでしょうか?

なぜ三項演算子は int メソッドで Null を返せるのに、if ステートメントでは Null を返せないのでしょうか?

DDD
DDDオリジナル
2024-11-05 22:12:02860ブラウズ

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

条件演算子の謎: 3 項と If ステートメントでの Null の戻り値

Java では、条件 (3 項) 演算子は次のような場合に興味深いパズルを引き起こします。メソッドの戻り値の型を扱います。次のコードを考えてみましょう。

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

temp() メソッドでは、メソッドが int を返すように宣言されているにもかかわらず、三項演算子によって null を返すことが許可されています。この一見直観に反する動作は、コンパイラが null を Integer オブジェクトへの null 参照として解釈することで説明されます。次に、条件演算子にオートボックス化/ボックス化解除ルールが適用され、その結果、Integer オブジェクトが返されます。ただし、このアクションは潜在的なランタイム NullPointerException をマスクします。

逆に、same() メソッドで三項演算子を if ステートメントとして表現しようとすると、型の互換性がないためコンパイル時エラーが発生します。これは、if ステートメントでは、int を返すメソッドに対して null を返すことができないためです。

パズルの核心は、三項演算子と if ステートメントの区別にあります。三項演算子を使用すると、条件に基づいて値を返すことができますが、if ステートメントでは戻り値の型を明示的に指定する必要があります。したがって、注意しないと、三項演算子は null を int メソッドに忍び込ませることができますが、if ステートメントでは、戻り値がメソッド シグネチャと互換性があることを確認する型​​チェックが強制されます。

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

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