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

标签 java string null

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

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

为什么我可以执行这条语句

String concatenated = str2 + " a_literal_string";

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

顺便说一句,我还尝试连接一个初始化为 null 的 Integer 和字符串文字 "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使用 String.valueOf 实现, String.valueOf(null) 返回字符串 "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) 其中 anyObjectnull 将返回 “null”

关于java - 空字符串对象和字符串文字的串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30708308/

相关文章:

java - IDEA中的guava源代码有错误,怎么回事

java - 使用抽象类中的通用参数重写方法

java - Java 中的 String.format() 和十六进制数字

c# - 为什么我会收到可空类型可能出现空赋值的警告

java - 获取 Amazon EC2 实例上的服务器内存使用情况

java - 理解 Java 正则表达式

php - LEFT JOINING 两个在字符串条件下不互相引用的表是一个坏主意吗?

javascript - Coffeescript 将文本文件的内容加载到字符串变量中

mysql - 主键列不允许空值

R 如何复制列表中的空值