System.out.print不换行,System.out.println自动换行;print适用于需控制输出节奏的场景,println适用于“一条信息占一行”的需求;println通常自动flush,但规范不保证,关键处应显式调用flush()。

System.out.print 和 System.out.println 的核心区别
最直接的区别是:前者不换行,后者自动在输出末尾加一个换行符 \n。这意味着连续调用 print 会把内容拼在同一行;而每次调用 println 都会从新行开始。
什么时候该用 print,什么时候必须用 println
用 print 的典型场景是需要控制输出节奏,比如实现进度提示、动态覆盖同一行(配合 \r)、或拼接多段输出再统一换行;println 更适合调试日志、逐条打印列表、或任何“一条信息占一行”的需求。
- 如果后续还要在同一行追加内容(如输入提示后等待用户输入),用
print("请输入:") - 若输出后需视觉分隔(如打印多个对象),直接用
println(obj)更安全,避免因忘记换行导致所有结果挤成一长串 -
println()不带参数时等价于print("\n"),但语义更清晰
底层行为与性能差异可以忽略
两者最终都调用 PrintStream.write(),区别仅在于 println 多一次 newLine() 调用。在绝大多数应用中,这个开销完全可忽略——别为这点差异做预优化。
- 不要因为“听说 println 慢一点”就全局替换为 print + 手动 \n,可读性和维护性更重要
- 注意:Windows 下
newLine()输出的是\r\n,Unix/Linux/macOS 是\n,这是由System.lineSeparator()决定的,不是硬编码 - 如果要跨平台保证一致换行,显式用
print("\n")反而可能出错,应信任println的实现
容易被忽略的陷阱:print 后没 flush 导致看不到输出
当标准输出被缓冲(比如重定向到文件或某些 IDE 控制台),只用 print 可能迟迟不显示内容,因为缓冲区还没刷出。而 println 在多数 JDK 实现中会触发自动 flush(前提是 PrintStream 的 autoFlush 为 true,System.out 默认开启)。
立即学习“Java免费学习笔记(深入)”;
- 如果用了
print却发现控制台没反应,先试System.out.flush() - 不要依赖
println一定 flush——它是“通常会”,但规范不保证;真正要确保刷新,请显式调用flush() - 在循环中频繁
print(如模拟加载动画),记得加flush(),否则可能卡住直到缓冲区满或程序退出
print 的“不换行”就真成了隐形开关。










