String messageFile = ... // Assume messageFile SHOULD have the string "MESSAGE"
System.out.println("The messageFile is: " + messageFile + "!!");
通常情況下,人們所期望的上述命令的輸出:的bizzare的System.out.println()在Java程序
The messageFile is: MESSAGE!!!!
不過,我收到此相反:
!!e messageFile is: MESSAGE
看看上面的說法,「!!」點似乎圍繞着消息。我的理論是:
String messageFile = ...
包含比我假設的「MESSAGE」更多的字符。因此,它將下一個輸入(在本例中爲「!!」)包裝到System.out.println()消息的前面。
是什麼字符造成這種情況?
額外的信息:
順便說一句,messageFile正在傳遞一個命令行參數的Java類,myClassA初始化。 myClassA的構造函數使用super()將messageFile參數傳遞給myClassB。 myClassB將messageFile傳遞給函數()。
是否有可能不止一個線程同時寫入System.out?我有一種感覺,System.out中使用的PrintStreams不是線程安全的。 – 2010-08-04 16:58:35
@matt打印或println的單個調用是作爲一個線程安全的操作發生的,但是如果System.out和System.err都指向相同的地方(例如控制檯),它們將會競爭,並且可能會看起來很「混合」輸出。 – 2010-08-04 18:16:42