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); }