2011-11-07 17 views
5

我無法理解的StringBuilder的以下行爲時,NULL對象被附加到一個實例:爲NULL StringBuffer的行爲對象

public class StringBufferTest { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     String nullOb = null; 
     StringBuilder lsb = new StringBuilder(); 

     lsb.append("Hello World"); 
     System.out.println("Length is: " + lsb.length());// Prints 11. Correct 

     lsb.setLength(0); 
     System.out.println("Before assigning null" + lsb.length());  
     lsb.append(nullOb); 
     System.out.println("Length now is:" + lsb.length()); // Prints 4. ??? 
    } 

} 

最後一個print語句不打印0誰能請幫助我理解行爲?

回答

1

不,你的長度設置爲0; 「分配空之前」打印0.

然後您將追加null,這將出現在緩衝區中作爲字符串"null",它有四個長度。

2

當您給它一個空引用時,StringBuilder追加「null」。它簡化了調試。如果您想要一個空字符串而不是「null」,只需在添加之前測試參考:

if (obj != null) { 
    builder.append(obj); 
}