为什么在 Java 中打印 '\0' 会使该行的其余部分无效?



我惊奇地发现下面的代码片段:

void print() {
    System.out.print("!");
    System.out.print("!");
    System.out.flush(); // This line does not affect the outcome
    System.out.println("!");
    System.out.println("!");
}

只输出:

!!
!

我搜索了开放JDK的源代码来寻找实现,但是没有结果。

唯一的线索是它似乎是BufferedOutputStream,它似乎也有类似的"在u0000上终止"的行为。

我也找不到任何关于这个(对我来说)非常意外的行为的文档。

编辑:My environment:

java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.2) (6b22-1.10.2-0ubuntu1~11.04.1)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
IDE: Eclipse Indigo 3.7.0

EDIT AGAIN:在命令行下,这段代码按预期工作(四个"!")。所以这似乎是Ubuntu下的Eclipse 3.7.0 Indigo的一个bug ?

(应该是)FINAL EDIT:看起来就像un信誉良好的和amir75说的,这不是Java的怪怪:我把Eclipse的输出重定向到一个文件,如果我在Eclipse中打开它,内容只有三个"!";但是当从命令行使用cat时,有四个。此外,vi和emacs都显示第一行为!!^@!,这与预期的一样。谢谢大家!

有人能解释一下吗?这在Java规范中有要求吗?谢谢你的建议!

这是终端相关的:我刚刚在Eclipse中尝试过,它再现了您的错误。在命令行中,它没有。

我认为这是可以预期的,因为自C以来的大多数语言在内部使用(一个空字节)来表示字符串的结束。

感谢已故的伟大的Dennis Ritchie,这就是事情的运作方式。

Java可能无法控制这种行为—是控制台决定如何解释字节。控制台并不总是按原样打印;有些字节甚至可能导致颜色变化或发出哔哔声。

相关内容

  • 没有找到相关文章

最新更新