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,因为参数使用双引号,但长度为零) - 正确吗?
不确定这个问题是否正确,但如果有人能够理解我的想法/混淆并明白这些问题,我将不胜感激。
答案 0 :(得分:4)
new StringBuilder("abc")
是new StringBuilder().append("abc")
的便利重载,但javadoc说:
字符串构建器的初始容量为16 加上字符串参数的长度。
这是为了创建一个更大的初始后备阵列,以提高性能,尽管这可能是微不足道的。
由于您无法获取空值的长度,因此获得NullPointerException
。
答案 1 :(得分:1)
new StringBuilder()
和new StringBuilder("")
相同;它们都创建一个空的StringBuilder
,没有任何内容,而不是StringBuilder
在任何意义上都包含null
。我相信这回答了你所有的三个问题。
答案 2 :(得分:0)
System.out.println(sb2);
不打印任何内容(甚至不是空格),因为StringBuilder
为空。StringBuilder
为空(包含的字符串的长度为0)。答案 3 :(得分:0)
StringBuilder()和StringBuilder(“”)做的完全相同。
虽然StringBuilder()只调用super(16)来初始化长度为16的char数组,但StringBuilder(“”)将长度“”加到16然后调用super,如下所示:super( str.length()+ 16)。 所以两者都返回一个初始化的StringBuilder对象。
由于super(null.length()+ 16),StringBuilder(null)崩溃