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。
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。