public class StartApplication
{
public static void main(String[] args)
{
String str=null;
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append(str);
System.out.println("stringBuffer:"+stringBuffer);//"null"
System.out.println("stringBuffer.length():"+stringBuffer.length());//4
StringBuffer stringBuffer1=new StringBuffer(str);//运行时报错
System.out.println("stringBuffer1"+stringBuffer1);
}
}
结果:
stringBuffer:null
Exception in thread "main" java.lang.NullPointerException
stringBuffer.length():4
at java.lang.StringBuffer.<init>(StringBuffer.java:139)
at com.gsafety.StartApplication.main(StartApplication.java:16)
原因:
以下为jdk源码
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;
}
/**
* Constructs a string buffer initialized to the contents of the
* specified string. The initial capacity of the string buffer is
* {@code 16} plus the length of the string argument.
*
* @param str the initial contents of the buffer.
*/
public StringBuffer(String str) {
super(str.length() + 16);
append(str);
}
本文解析了一个Java程序中,尝试将null值初始化StringBuffer时出现的NullPointerException。通过分析源码,揭示了问题发生的原因,并探讨了StringBuilder构造函数的行为。
1870

被折叠的 条评论
为什么被折叠?



