我只是想知道是否有人可以解释为什么以下代码的工作方式如下:
String a = null;
String b = null;
String c = a + b;
System.out.println(c.toString());
这会将“nullnull”打印到控制台。
我有点期待操作+抛出异常,或者在较小程度上抛出“c”将为空。
答案 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();
}