@Test
public void test(){
String str = null;
StringBuffer sb = new StringBuffer();
sb.append(str);
System.out.println(sb.length());
System.out.println(sb);
StringBuffer sb1 = new StringBuffer(str);
System.out.println(sb1);
}
运行结果:
1. 分析:sb.append(null);
当传入null时会调用appenNull()方法创建了一个length = 4 的char[]。
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;
}
2. StringBuffer sb1 = new StringBuffer(str);
System.out.println(sb1);//空指针异常。
原因:
public StringBuffer(String str) {
super(str.length() + 16);
append(str);
}
strr.length -> null.length :空指针异常.