Understanding Out-of-Order Printing with System.out.println and System.err.println
When using System.out.println and System.err.println, you might encounter an unexpected behavior where the output from these two methods appears out of order in the console.
Issue:
In the provided code:
public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println("out"); System.err.println("err"); } }
Output:
out out out out out err err err err err
Instead of alternating between "out" and "err," the output shows all "out" lines followed by all "err" lines.
Cause:
This behavior is due to the fact that System.out and System.err are different streams. When you write to these streams, the data is initially buffered. The buffered data is only written to the actual console output at specific times, such as when:
By default, System.out and System.err are flushed differently. System.out is flushed more frequently than System.err. Therefore, any data written to System.out tends to appear before data written to System.err.
Solution:
To ensure that the output alternates between "out" and "err," you can call System.out.flush() and System.err.flush() inside the loop:
public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println("out"); System.err.println("err"); System.out.flush(); System.err.flush(); } }
With this modification, the output will alternate as expected:
out err out err out err out err out err
The above is the detailed content of Why Does System.out.println and System.err.println Output Appear Out of Order?. For more information, please follow other related articles on the PHP Chinese website!