2016-01-21 119 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)