赞
踩
很多人习惯,习惯将基本类型或基本类型的包装器类通过以下形式进行隐性转换,例如,
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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。