【发布时间】:2011-03-25 08:33:51
【问题描述】:
String messageFile = ... // Assume messageFile SHOULD have the string "MESSAGE"
System.out.println("The messageFile is: " + messageFile + "!!");
通常,人们会期望上面的命令输出:
The messageFile is: MESSAGE!!!!
但是,我收到的是这个:
!!e messageFile is: MESSAGE
看看上面的语句,“!!”点似乎围绕着信息。我的理论是:
String messageFile = ...
包含比我假设的“MESSAGE”更多的字符。结果,它将下一个输入(在本例中为“!!”)包装到 System.out.println() 消息的前面。
这是什么角色造成的?
额外信息:
顺便说一句,messageFile 正在通过将命令行参数传递给 java 类 myClassA 来初始化。 myClassA 的构造函数使用 super() 将 messageFile 参数传递给 myClassB。 myClassB 将 messageFile 传递给 function()。
【问题讨论】:
-
是否可能有多个线程同时写入 System.out?我感觉 System.out 中使用的 PrintStreams 不是线程安全的。
-
@matt 对 print 或 println 的单独调用作为一个线程安全操作发生,但如果 System.out 和 System.err 都指向同一个地方(例如控制台),它们将竞争而你可能会得到看起来很傻的“混合”输出。
标签: java linux string debugging char