可能重复:
在 Java 中连接空字符串
我只是想知道是否有人可以解释为什么以下代码会以这种方式工作:
String a = null;
String b = null;
String c = a + b;
System.out.println(c.toString());
这会将“nullnull”打印到控制台。
我有点期待操作 + 会引发异常,或者在较小程度上,“c”将为空。
可能重复:
在 Java 中连接空字符串
我只是想知道是否有人可以解释为什么以下代码会以这种方式工作:
String a = null;
String b = null;
String c = a + b;
System.out.println(c.toString());
这会将“nullnull”打印到控制台。
我有点期待操作 + 会引发异常,或者在较小程度上,“c”将为空。
因为该代码编译为
String c = new StringBuilder().append(a).append(b).toString();
并StringBuilder.append(a)
附加结果String.valueof(a)
是"null"
if a
isnull
连接运算符要求的“字符串转换”要求在需要字符串表示时将空值映射到四个字符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
当java在字符串连接过程中找到null
引用时,将其转换为字符串"null"
。"nullnull"
正确的结果也是如此。
在连接每个对象 Java 调用之前
java.lang.String.valueOf(Object)
如果您查看该方法的源代码,您会发现
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}