StringBuilder 设置长度()

StringBuilder setLength()

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 代码的最后输出不包含下划线字符。谁能解释一下?谢谢你的帮助。

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

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

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

123_
12_
12_

这对我来说更符合逻辑,因为

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

首先计算 sb.toString(),然后将“_”添加到结果字符串中。

以下面几行为例:

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

第二行显示错误"cannot convert from String to StringBuffer",可以看到使用+运算符将String添加到StringBuffer的结果是String。