这是some previous questions关于Java中字符串初始化的后续问题。
经过Java的一些小测试,我面临以下问题:
为什么我可以执行此声明
String concatenated = str2 + " a_literal_string";
当str2
String
对象初始化为null
(String str2 = null;
)时,我无法在toString()
上调用方法str2
?那么Java如何做
顺便说一下,我还尝试将一个初始化为null的字符串和字符串文字"a_literal_string"
连接起来,我在控制台中得到了同样的东西"null a_literal_string"
。那么无论哪种null都给出同样的东西?
PS:System.out.println(concatenated);
在控制台中输出 null a_literal_string 。
答案 0 :(得分:9)
这一行:
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)
会返回字符串"null"
。< / p>
我还尝试连接一个初始化为null的字符串和字符串文字“a_literal_string”并且我有同样的事情
这与上述原因相同。 String.valueOf(anyObject)
anyObject
null
"null"
会回复template <class T>
static std::shared_ptr<T> create1(std::shared_ptr<Creator> &creator, std::shared_ptr<T> &,T value)
{
return creator->createA(value) ;
}
。