为什么stringbuilder在使用空字符后停止添加元素?

当我使用字符'\u0000' ,stringbuilder将停止附加新元素。

例如:

 StringBuilder _stringBuilder = new StringBuilder(); _stringBuilder.append('\u0000'); _stringBuilder.append('a'); System.out.println("."+_stringBuilder+"."); 

回报

 . 

我明白,空值不应该打印(或打印,如果它是一个空string值),但在这种情况下,为什么stringbuilder无法添加更多的元素?

注意:我在Ubuntu上使用jdk 1.6.0_38。

Solutions Collecting From Web of "为什么stringbuilder在使用空字符后停止添加元素?"

空字符是一个保留的字符,表示字符串的结尾,所以如果你打印一些跟在\u0000之后的东西,没有其他的东西会打印出来。


为什么stringbuilder在使用空字符后停止添加元素? 这不是真的java,它是你的终端,把\u0000作为字符串的结尾。

正如有人所说,在Windows中,输出可以是.a. (我没有测试它),这是因为Windows终端工作不同于基于Unix的系统终端。 我很确定,如果你在OSX机器上运行这个代码,你会得到和你在linux上一样的输出

你的stringBuilder仍附加元素,请看:

 StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append('\u0000'); System.out.println(stringBuilder.length()); // prints 1 stringBuilder.append('a'); System.out.println(stringBuilder.length()); // prints 2 

我的猜测是你的控制台在\u0000终止字符后停止打印。 不同的控制台可能会有不同的处理

我尝试了你的测试,并且在我的Windows 7系统上的Eclipse中没有失败。 但是,运行这个测试程序将区分非附加和非打印。 我建议在失败的环境中运行它。

 public class Test { public static void main(String[] args){ StringBuilder _stringBuilder = new StringBuilder(); _stringBuilder.append('\u0000'); _stringBuilder.append('a'); System.out.println("."+_stringBuilder+"."); System.out.println(_stringBuilder.length()); System.out.println(_stringBuilder.charAt(1)); } } 

如果问题不是附加的,则长度将小于2,并且在索引1处打印字符的尝试将失败。 如果问题不是打印,则长度将是2,索引1处的字符将是“a”。

我认为非印刷比非印刷更可能。