Для автономной программы println
печатает на стандартный вывод, который является PrintWriter, который очищает внутренний буфер после печати. Из JavaDo c для PrintStream :
[...] По желанию, PrintStream может быть создан так, чтобы грипп sh автоматически; это означает, что метод flu sh автоматически вызывается после записи байтового массива, запускается один из методов println или пишется символ новой строки или байт ('\ n').
printf
не выполняет очистку, поэтому (если это не выполнено REPL) нет функции принудительного вывода на печать до завершения программы. Если вы хотите грипп sh вручную, вы всегда можете сделать (.flush System/out)
или (println)
самостоятельно.
Редактировать : вы можете увидеть это в источниках JDK: println () вызывает закрытый метод с именем newLine () , который выполняет сброс:
// ... snip
synchronized (this) {
ensureOpen();
textOut.newLine();
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush)
out.flush();