2016-01-21 66 views
0

公共類TestMyStringBuilderII {的StringBuilder()與StringBuilder的(空)VS的StringBuilder( 「」)

public static void main(String[] args) { 
    StringBuilder sb = new StringBuilder("Hello"); 
    StringBuilder sb1 = new StringBuilder("World"); 
    StringBuilder sb2 = new StringBuilder(); 
    //StringBuilder sb3 = new StringBuilder(null); 
    StringBuilder sb4 = new StringBuilder(""); 

    System.out.println(sb); 
    System.out.println(sb.length()); 
    System.out.println(sb.append(sb1)); 
    System.out.println(sb.append(sb2)); 
    //System.out.println(sb.append(sb3)); 
} 

}

的SB3 =新的StringBuilder(空)導致的NullPointerException。現在,StringBuilder(),StringBuilder(「」)和StringBuilder(null)有什麼區別?

a)System.out.println(sb2);當需要追加實際字符(「null」)(根據AbstaractStringClass定義)時,打印空白空間 - 爲什麼?

b)System.out.println(sb2.length());打印0,所以這是因爲sb不是真的「空」(意思是某件東西/長度爲零的東西?)

c)System.out.println(sb4);正在打印空白空間和System.out.println(sb4.length());打印0(假設sb4實際上是String,因爲用於參數的雙引號,但是長度爲零) - 正確嗎?

不知道這個問題是否能正確的表達出來,但是如果有人能夠理解我的想法/困惑並澄清這些,我將不勝感激。

+0

完美,下面是有意義的全部四個答案。謝謝所有 –

回答

1

new StringBuilder()new StringBuilder("")是等價的;它們在任何意義上都創建了一個空的StringBuilder,沒有內容,也沒有包含nullStringBuilder。我相信這會回答你所有的三個問題。

+0

謝謝,是有道理的。 –

4

new StringBuilder("abc")new StringBuilder().append("abc")便利過載,除了javadoc的說:

字符串生成器的初始容量爲16 加上字符串參數的長度。

這是爲了創建更大的初始支持陣列,以提高性能,儘管這可能很小。

由於您無法獲取空值的長度,因此您會收到NullPointerException

+0

+1,另外源代碼有助於揭示這些奧祕http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/StringBuilder.java – LordAnomander

0
  • 一)System.out.println(sb2);什麼也不打印(甚至不是一個空的空間),因爲StringBuilder是空的。
  • b)打印零,因爲StringBuilder爲空(包含的字符串的長度爲0)。
  • c)不打印任何東西,因爲沒有附加任何東西。
0

StringBuilder()和StringBuilder(「」)的做法完全相同。雖然StringBuilder()只調用super(16)初始化長度爲16的字符數組,但StringBuilder(「」)將長度「」添加到16,然後調用super,它看起來像這樣:super (str.length()+ 16)。 所以兩者都返回一個初始化的StringBuilder對象。

的StringBuilder(空)崩潰,因爲超(null.length()+ 16)