【发布时间】:2021-06-24 00:20:11
【问题描述】:
我认为System.out.println() 和System.err.println() 之间的区别仅仅是消息如何打印到控制台。含义err 打印错误消息(红色),而out 打印标准消息。我注意到它们不像预期的那样相似(例如,错误消息会总是在消息输出之前打印出来)。
但是有一个例子我特别困惑。假设我有这个简单的程序:
Scanner scanner = new Scanner(System.in);
while (true) {
int num = scanner.nextInt();
if (num > 0) {
System.out.println("All good, bye");
break;
} else {
System.out.println("Number must be possitive!");
System.out.print("New try:");
}
}
输出(来自我的测试):
但是当我编写完全相同的代码并更改消息“数字必须是正数”以使用System.err.println() 打印时:
Scanner scanner = new Scanner(System.in);
while (true) {
int num = scanner.nextInt();
if (num > 0) {
System.out.println("All good, bye");
break;
} else {
System.err.println("Number must be possitive!");
System.out.print("New try:");
}
}
输出(来自我的测试):
我不知道它是如何制作这些奇怪的印刷品的。谁能告诉我我错过了什么?
【问题讨论】:
-
在
System.err.println("Number must be possitive!");之后添加System.err.flush();。 -
@saka1029 没用
-
这是您的 IDE 引起的问题。如果您在命令提示符/终端窗口中运行代码,它将正确打印。当输出需要由另一个程序(如 IDE)读取时,不要将输出混合到 stdout 和 stderr。
-
System.out被缓冲:System.err不是。 -
@user207421 你确定是(总是(甚至?))情况吗? eclipse 在这里为 both 使用
BufferedOutputStream- 对于命令行 Java (Java 1.8.0_202) 也是如此
标签: java stream system.out system.err