我發現我的困惑,下面的代碼片段:爲什麼打印' 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中的一個錯誤?謝謝! –