java打印char数组

sak*_*ura 6 java char system.out

我正在运行此代码和

char[] str = { 'a', 'b', 'c', 0, 'c', 'c', 'f' };
System.out.print(str);
System.out.println(" adksjfhak");
Run Code Online (Sandbox Code Playgroud)

这打印只是"abc".而,

char[] str = { 'a', 'b', 'c', 0, 'c', 'c', 'f' };
System.out.print(str);
System.out.println("\n adksjfhak");
Run Code Online (Sandbox Code Playgroud)

版画

abc
 adksjfhak
Run Code Online (Sandbox Code Playgroud)

为什么打印缓冲区停止为null(0)字符?这是否意味着Java只是保持追加字符缓冲并打印缓冲区?当然,由于缓冲区之间有0,它会丢弃其余的字符串.

可能我已经回答了我自己的一部分问题.但我想知道更多关于此的细节.HOW JVM处理这个?这个输出缓冲区在哪里?有没有理由停在0?为什么添加\n会阻止此行为?

编辑1:使用JDK 1.7,Eclipse 3.8.1和Ubuntu 13.10

编辑2:奇怪的是,这个没有那个问题.https://ideone.com/VwFbRr

编辑3:我在命令行上运行相同的操作

[bin]$ java com.sakura.C 
abcccf adksjfhak
Run Code Online (Sandbox Code Playgroud)

War*_*Dew 0

最有可能的是,在这两种情况下,所有内容都会“打印”到操作系统,但在第一种情况下,操作系统或 shell 将“0”字符作为不显示该行其余部分的信号。在第一种情况下,两个字符串出现在同一行,因此第二个字符串也会被抑制。在第二种情况下,第二个字符串位于新行,因此会显示。