2

据我了解,当 + 运算符与两个字符串文字一起使用时,会调用 concat 方法来生成预期的字符串。例子 -String s = "A" + "B";

当有 null 代替下面的一个文字时,它会在输出下方生成。我在这里很困惑 - 为什么它不抛出NullPointerException

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

输出:

空B

4

2 回答 2

6

为什么不扔NullPointerException

因为,字符串连接将字符串转换操作应用于不是类型的操作数,在这种情况下Stringnull引用。字符串连接转换为:

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

不会抛出NPE.

JLS §5.1.11 - 字符串转换

然后通过字符串转换将此引用值转换为 String 类型。[...]

  • 如果引用为null,则将其转换为字符串"null"(四个 ASCII 字符null)。
于 2013-10-10T15:35:44.423 回答
4

因为您要连接两个字符串,str所以不为空。当您使用 + 连接两个字符串时,它也需要 null 作为字符串。

于 2013-10-10T15:36:48.090 回答