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

Vir*_*oll 12 java eclipse linux null character

当我使用null字符时'\u0000',stringbuilder将停止追加新元素.

例如:

StringBuilder _stringBuilder = new StringBuilder();
_stringBuilder.append('\u0000');
_stringBuilder.append('a');
System.out.println("."+_stringBuilder+".");
Run Code Online (Sandbox Code Playgroud)

回报

. 
Run Code Online (Sandbox Code Playgroud)

我知道不应该打印null值(或者打印就像是一个null String值),但在这种情况下,为什么stringbuilder无法添加更多元素?

注意:我在ubuntu上使用jdk 1.6.0_38.

Bac*_*ash 7

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


为什么stringbuilder在使用null字符后停止添加元素?它不是真正的java,它是你的终端,它被视为\u0000字符串的结尾.

正如有人所说,使用Windows输出可以.a.(我没有测试它),这是因为Windows终端的工作方式与基于Unix的系统终端不同.我很确定如果你在OSX机器上运行这个代码,你将获得与你在linux上获得的输出相同的输出

  • 它打印一个`.`,一个框(对于空字符),一个`a`和一个`.`由windows机器打开. (2认同)
  • null字符不用于终止Java中的字符串. (2认同)

jlo*_*rdo 7

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
Run Code Online (Sandbox Code Playgroud)

我的猜测是你的控制台在\u0000终止字符后停止打印.另一个控制台可能会以不同方式处理