很多人习惯,习惯将基本类型或基本类型的包装器类通过以下形式进行隐性转换,例如,
int f = 1;
String ff = f+"";
但是当要印象转换是个对象,那么结果会是怎么样呢?
String a = null;
String b = null;
String c = a +"";
String d = a+b;
System.out.println(c);
System.out.println(d);
结果居然是
null
nullnull
S
下面解答疑惑,因为jvm虚拟机为了提升字符串拼接性能,将 “+”,编译处理为StringBuilder.append方法 ,而append方法就将null拼接成"null"字符串,这也就是为什么出现以上结果的原因
public AbstractStringBuilder append(String str) {
if (str == null)
return appendNull();
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}
private AbstractStringBuilder appendNull() {
int c = count;
ensureCapacityInternal(c + 4);
final char[] value = this.value;
value[c++] = 'n';
value[c++] = 'u';
value[c++] = 'l';
value[c++] = 'l';
count = c;
return this;
}