System.out در حقیقت یک نوع PrintStream است که بصورت پیشفرض وقتی کاراکتر newline درونش نوشته شود متد flush را فراخوانی می کند و همچنین قابلیت autoFlush نیز دارد. در مثال شما چه متد flush فراخوانی شود چه نشود هیچ فرقی ندارد چون System.out وقتی اطلاعاتی درونش نوشته شود بصورت خودکار متد flush را فراخوانی می کند.
اما کی باید از متد ()System.out.flush استفاده کرد؟
اگر شما با استفاده از متد System.setOut یک PrintStream جدید را با System.out جایگزین کنید که از قابلیت autoFlush استفاده نمی کند آنگاه باید برای اعمال اطلاعات در خروجی باید خودتان در کد متد flush را فراخوانی کنید.