2

私の理解によると、+ 演算子が 2 つの文字列リテラルで使用されると、concat メソッドが呼び出されて、期待される文字列が生成されます。例 -String s = "A" + "B";

以下のように 1 つのリテラルの代わりに null がある場合、以下の出力が生成されます。ここで混乱しています-なぜ投げていないのNullPointerExceptionですか?

    String str = null + "B";
    System.out.println(str);

出力:

nullB

4

2 に答える 2

6

なぜ投げていないのですかNullPointerException

なぜなら、文字列連結は型ではないオペランドに文字列変換演算を適用するからです。この場合Stringは参照です。null文字列連結は次のように変換されます。

String str = new StringBuilder("null").append("B").toString();

をスローしませんNPE

JLS §5.1.11から- 文字列変換:

この参照値は、文字列変換によって String 型に変換されます。[...]

  • 参照が の場合、文字列(4 つの ASCII 文字、、、 )nullに変換されます。"null"null
于 2013-10-10T15:35:44.423 に答える
4

2 つの文字列を連結しているため、strnull ではありません。+ を使用して 2 つの文字列を結合すると、null も文字列になります。

于 2013-10-10T15:36:48.090 に答える