这是以前有关Java中的String初始化的一些问题的后续问题。
在用Java进行了一些小测试之后,我面临以下问题:
为什么我可以执行此语句
String concatenated = str2 + " a_literal_string";
当str2一个String对象初始化为null(String str2 = null;),但我不能调用方法toString()上str2?那么Java如何将空字符串对象和字符串文字串联起来?
null(String str2 = null;)
顺便说一句,我还尝试将一个初始化为null和字符串文字的Integer连接起来,”a_literal_string”并且我”null a_literal_string”在控制台中得到了同样的东西。那么,哪一种null都会带来相同的效果? PS:System.out.println(concatenated);给空a_literal_string作为控制台输出。
PS:System.out.println(concatenated)
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 a_literal_string"
NullPointerException
StringBuilder.append
String.valueOf
String.valueOf(null)
string "null"
我还尝试将一个初始化为null的Integer和字符串文字“ a_literal_string”连接起来,我得到了同样的东西
“ a_literal_string”
这是由于与上述相同的原因。String.valueOf(anyObject)这里anyObject是null会给予回复”null”。
String.valueOf(anyObject)
anyObject