14

次のプログラムが NPE をスローする理由を知りたい

public static void main(String[] args) {
    Integer testInteger = null;
    String test = "test" + testInteger == null ? "(null)" : testInteger.toString();
}

この間

public static void main(String[] args) {
    Integer testInteger = null;
    String test = "test" + (testInteger == null ? "(null)" : testInteger.toString());
}

しません。これは確かに優先度の高い問題であり、連結が内部でどのように機能するのか興味があります。

4

4 に答える 4

19

これは、演算子の優先順位を理解することの重要性の例です。

括弧が必要です。そうでない場合は、次のように解釈されます。

String test = ("test" + testInteger) == null ? "(null)" : testInteger.toString();

演算子とその優先順位のリストについては、ここを参照してください。また、そのページの上部にある警告にも注意してください。

注:混乱する可能性がある場合でも、明示的な括弧を使用してください。

于 2012-07-27T10:58:25.870 に答える
6

角かっこがないと、これを効果的に実行できます。 String test = ("test" + testInteger) == null ? "(null)" : testInteger.toString(); これにより、NPEが発生します。

于 2012-07-27T10:58:55.563 に答える
1

"test" + testInteger(これは"testnull"、したがってnullではない)として評価されるため、testInteger == nullテストがtrueを返すことはありません。

于 2012-07-27T10:59:04.467 に答える