null String对象和字符串文字的串联

Gab*_*是好人 5 java string null

这是关于Java中字符串初始化的一些先前问题的后续问题.

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

为什么我可以执行此语句

String concatenated = str2 + " a_literal_string";
Run Code Online (Sandbox Code Playgroud)

str2一个String初始化对象null(String str2 = null;),但我不能调用方法toString()str2?那么Java如何进行空String对象和字符串文字的连接

顺便说一下,我还尝试将一个初始化为null的字符串"a_literal_string"和字符串文字连接起来,我"null a_literal_string"在控制台中也有同样的东西.那么无论哪种null都给出同样的东西?

PS:System.out.println(concatenated);空a_literal_string作为控制台输出.

aio*_*obe 9

这一行:

String concatenated = str2 + " a_literal_string";
Run Code Online (Sandbox Code Playgroud)

编译成类似的东西

String concatenated = new StringBuilder().append(str2)
                                         .append(" a_literal_string")
                                         .toString();
Run Code Online (Sandbox Code Playgroud)

这给出"null a_literal_string"(而不是NullPointerException)因为StringBuilder.append使用了String.valueOf,并String.valueOf(null)返回字符串"null".

我还尝试连接一个初始化为null的字符串和字符串文字"a_literal_string",我也有同样的事情

这与上述原因相同.String.valueOf(anyObject)这里anyObjectnull会给予回复"null".