1

可能重复:
在 Java 中连接空字符串

我只是想知道是否有人可以解释为什么以下代码会以这种方式工作:

String a = null;
String b = null;
String c = a + b;
System.out.println(c.toString());

这会将“nullnull”打印到控制台。

我有点期待操作 + 会引发异常,或者在较小程度上,“c”将为空。

4

3 回答 3

9

因为该代码编译为

String c = new StringBuilder().append(a).append(b).toString();

StringBuilder.append(a)附加结果String.valueof(a)"null"if aisnull

于 2012-04-12T18:41:24.603 回答
2

连接运算符要求的“字符串转换”要求在需要字符串表示时将空值映射到四个字符null

字符串转换规范: http: //docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.11

字符串连接规范: http: //docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.18.1

于 2012-04-12T18:44:34.623 回答
0

当java在字符串连接过程中找到null引用时,将其转换为字符串"null""nullnull"正确的结果也是如此。

在连接每个对象 Java 调用之前

java.lang.String.valueOf(Object)

如果您查看该方法的源代码,您会发现

public static String valueOf(Object obj) {
  return (obj == null) ? "null" : obj.toString();
}
于 2012-04-12T18:42:15.473 回答