空字符串对象和字符串文字的串联
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.valueOf
和 String.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)
其中 anyObject
是 null
将返回 "null"
.
这是
经过 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.valueOf
和 String.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)
其中 anyObject
是 null
将返回 "null"
.