空字符串对象和字符串文字的串联

Concatenation of a null String object and a string literal

这是 关于 Java 中字符串初始化的后续问题。

经过 Java 中的一些小测试后,我面临以下问题:

为什么我可以执行这条语句

String concatenated = str2 + " a_literal_string";

str2 一个 String 对象初始化为 null (String str2 = null;) 但我无法在 str2 上调用方法 toString()?那么Java如何连接空字符串对象和字符串文字

顺便说一句,我还尝试将初始化为 null 的整数和字符串文字 "a_literal_string" 连接起来,我在控制台中得到了与 "null a_literal_string" 相同的东西。那么无论哪种 null 都给出相同的结果?

PS : System.out.println(concatenated); 在控制台输出 null a_literal_string

这一行:

String concatenated = str2 + " a_literal_string";

被编译成类似

的东西
String concatenated = new StringBuilder().append(str2)
                                         .append(" a_literal_string")
                                         .toString();

这给出了 "null a_literal_string"(而不是 NullPointerException),因为 StringBuilder.append is implemented using String.valueOfString.valueOf(null) returns 字符串 "null".

I tried also to concatenate an Integer initialized to null and the string literal "a_literal_string" and I've got the same thing

这和上面的原因是一样的。 String.valueOf(anyObject) 其中 anyObjectnull 将返回 "null".