我发现我的困惑,下面的代码片段:为什么打印' 0'会使Java的其余部分无效?
void print() {
System.out.print("!");
System.out.print("!\0");
System.out.flush(); // This line does not affect the outcome
System.out.println("!");
System.out.println("!");
}
将只打印出来:
!!
!
我搜索了实施开放JDK的源代码,但无济于事。
唯一的线索有线索似乎BufferedOutputStream
,它似乎也有类似的“终止在\ u0000”行为。
另外我找不到任何关于这个意外(对我来说)行为的文档。
编辑:我的环境:
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
再次编辑:在命令行中,该代码按预期工作(四个S “!”)。所以它似乎是Ubuntu下的Eclipse 3.7.0 Indigo的一个bug?最终编辑:看起来不可信和amir75说,这不是Java的怪癖:我将Eclipse的输出重定向到一个文件,如果我在Eclipse中打开它,仅仅是内容有三个“!”;但是从命令行使用cat
时,有四个。另外,vi和emacs在第一行显示!!^@!
,这和预期一致。谢谢你们!
有人可以对此有所了解吗?这是Java Spec中的任何地方需要的吗?感谢您的任何意见!
无法重现。按照预期,以下内容将打印4'!':http://ideone.com/HrKZE –
您使用的是哪个版本的JDK? –
@Matt Ball:我用我的环境信息更新了帖子。这是一个特定于实现的东西,还是OpenJDK/Eclipse中的一个错误?谢谢! –