tangguo

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

java

这是以前有关Java中的String初始化的一些问题的后续问题。

在用Java进行了一些小测试之后,我面临以下问题:

为什么我可以执行此语句

String concatenated = str2 + " a_literal_string";

当str2一个String对象初始化为null(String str2 = null;),但我不能调用方法toString()上str2?那么Java如何将空字符串对象和字符串文字串联起来?

顺便说一句,我还尝试将一个初始化为null和字符串文字的Integer连接起来,”a_literal_string”并且我”null a_literal_string”在控制台中得到了同样的东西。那么,哪一种null都会带来相同的效果?
PS:System.out.println(concatenated);给空a_literal_string作为控制台输出。


阅读 373

收藏
2020-11-20

共1个答案

小编典典

这行:

String concatenated = str2 + " a_literal_string";

被编译成类似

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

这给出"null a_literal_string"(而不是给出NullPointerException),因为StringBuilder.append是使用实现的String.valueOf,并String.valueOf(null)返回string "null"

我还尝试将一个初始化为null的Integer和字符串文字“ a_literal_string”连接起来,我得到了同样的东西

这是由于与上述相同的原因。String.valueOf(anyObject)这里anyObject是null会给予回复”null”。

2020-11-20