1. ホーム
  2. java

[解決済み] 三項演算子でint型としてnullを返すことはできるがif文では不可

2022-04-14 19:10:05

質問

次のスニペットの簡単なJavaコードを見てみましょう。

public class Main {

    private int temp() {
        return true ? null : 0;
        // No compiler error - the compiler allows a return value of null
        // in a method signature that returns an int.
    }

    private int same() {
        if (true) {
            return null;
            // The same is not possible with if,
            // and causes a compile-time error - incompatible types.
        } else {
            return 0;
        }
    }

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

この最も単純なJavaのコードでは temp() メソッドは、関数の戻り値の型が int という値を返そうとしています。 null (ステートメントを通して return true ? null : 0; ). コンパイルすると、明らかに実行時例外が発生します NullPointerException .

しかし、三項演算子を if ステートメントを使用します(たとえば same() メソッド)を使用すると、どの する は、コンパイル時にエラーを発生させます なぜ?

解決方法は?

コンパイラは null への NULL 参照として扱われます。 Integer で説明したように)、条件演算子のオートボックス/アンボックスのルールを適用します。 Java言語仕様、15.25 で、楽しく移動します。これによって NullPointerException を実行時に確認することができます。