StringBuilder setLength()

时间:2015-02-22 12:05:30

标签: java stringbuilder

class Test {  
    public static void main(String args[]) {  
        StringBuilder sb = new StringBuilder("123");  

        System.out.println(sb + "_");   //123_  // expected ouput

        sb.setLength(2);  
        System.out.println(sb + "_");   //12_   // expected output  

        sb.setLength(3);      
        System.out.println(sb + "_");   //12    // no underscore ????  
    }  
}

我不明白为什么这个Java代码的最后一个输出不包含下划线字符。谁能解释一下?谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

空字符是一个保留字符,用于指示字符串的结尾,因此如果您打印的内容后面跟着\ u0000,则不会打印任何其他内容。

答案在这里Why stringbuilder stops adding elements after using the null character?

答案 1 :(得分:0)

当我执行你的代码时,我的输出是以下

123_
12_
12_

这对我来说更合乎逻辑,如

System.out.println(sb + "_");

首先计算sb.toString(),然后将“_”广告到生成的字符串。

举个例子,请按以下几行:

String a = sb + "_"; // This line compiles
StringBuffer a = sb + "_"; // This line does not compile

第二行显示错误“无法从String转换为StringBuffer”,正如您所见,使用+运算符将String添加到StringBuffer的结果是String。