StringBuilder()vs StringBuilder(null)vs StringBuilder(“”)

时间:2016-01-21 07:58:54

标签: java null stringbuilder

public class TestMyStringBuilderII {

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 = new StringBuilder(null)导致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,因为参数使用双引号,但长度为零) - 正确吗?

不确定这个问题是否正确,但如果有人能够理解我的想法/混淆并明白这些问题,我将不胜感激。

4 个答案:

答案 0 :(得分:4)

new StringBuilder("abc")new StringBuilder().append("abc")的便利重载,但javadoc说:

  

字符串构建器的初始容量为16 加上字符串参数的长度

这是为了创建一个更大的初始后备阵列,以提高性能,尽管这可能是微不足道的。

由于您无法获取空值的长度,因此获得NullPointerException

答案 1 :(得分:1)

new StringBuilder()new StringBuilder("")相同;它们都创建一个空的StringBuilder,没有任何内容,而不是StringBuilder在任何意义上都包含null。我相信这回答了你所有的三个问题。

答案 2 :(得分:0)

  • a)System.out.println(sb2);不打印任何内容(甚至不是空格),因为StringBuilder为空。
  • b)打印零,因为StringBuilder为空(包含的字符串的长度为0)。
  • c)没有任何内容,因为没有附加内容。

答案 3 :(得分:0)

StringBuilder()和StringBuilder(“”)做的完全相同。

虽然StringBuilder()只调用super(16)来初始化长度为16的char数组,但StringBuilder(“”)将长度“”加到16然后调用super,如下所示:super( str.length()+ 16)。 所以两者都返回一个初始化的StringBuilder对象。

由于super(null.length()+ 16)

StringBuilder(null)崩溃