Java字符串连接 - 空值

时间:2012-04-12 18:38:29

标签: java string string-concatenation

  

可能重复:
  Concatenating null strings in Java

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

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

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

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

3 个答案:

答案 0 :(得分:9)

因为该代码编译为

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

StringBuilder.append(a)附加String.valueof(a) which is "null" if a is null

的结果

答案 1 :(得分: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

答案 2 :(得分:0)

当java在字符串连接期间找到null引用时,将其转换为字符串"null"。所以"nullnull"是正确的结果。

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

java.lang.String.valueOf(Object)

如果你查看该方法的源代码,你会发现这个

public static String valueOf(Object obj) {
  return (obj == null) ? "null" : obj.toString();
}