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

时间:2015-06-08 11:43:39

标签: java string null

这是some previous questions关于Java中字符串初始化的后续问题。

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

为什么我可以执行此声明

String concatenated = str2 + " a_literal_string";

str2 String对象初始化为nullString str2 = null;)时,我无法在toString()上调用方法str2?那么Java如何做空String对象和字符串文字的连接?

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

PS:System.out.println(concatenated);在控制台中输出 null a_literal_string

1 个答案:

答案 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) ; }