条件演算子の謎: 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 サイトの他の関連記事を参照してください。