次の 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 サイトの他の関連記事を参照してください。