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