String.format 生成格式化字符串供后续处理,printf 直接输出到控制台;二者共享格式说明符(如 %s、%d、%.2f)和规则,区别在于前者返回字符串,后者执行打印且不自动换行。

字符串格式化输出在编程中很常见,String.format 和 printf 都是 Java 中基于格式说明符(如 %s、%d)实现的便捷方式,核心逻辑一致,但使用场景和语法略有不同。
String.format:生成格式化后的字符串
它不直接输出,而是返回一个新字符串,适合需要拼接、存储或后续处理的场合。
- 语法:
String.format(格式字符串, 参数1, 参数2, ...) - 格式字符串中用
%开头的占位符匹配参数,顺序一一对应 - 常见占位符:
%s(字符串)、%d(十进制整数)、%f(浮点数)、%c(字符)、%%(输出百分号本身) - 支持宽度、精度等修饰,例如
%.2f表示保留两位小数,%10s表示最小宽度为 10 的右对齐字符串
示例:
String msg = String.format("姓名:%s,年龄:%d,身高:%.1f", "张三", 25, 175.68);
// 结果:"姓名:张三,年龄:25,身高:175.7"
printf:直接输出到控制台(或指定 PrintStream)
它是 PrintStream 类的方法(System.out.printf 最常用),功能与 String.format 几乎完全相同,只是省去了“构造字符串再打印”的中间步骤。
- 语法:
System.out.printf(格式字符串, 参数1, 参数2, ...) - 同样按顺序匹配占位符,支持相同的格式说明符和修饰符
- 不会自动换行,如需换行要显式加
\n或调用println()
示例:
System.out.printf("总价:%d 元,折扣后:%.2f 元%n", 100, 85.5);
// 输出:"总价:100 元,折扣后:85.50 元" 并换行(%n 是平台无关换行符)
注意事项与常见问题
两者共享同一套格式化规则,因此容易出错的地方也类似:
- 参数数量与占位符数量不匹配会抛出
IllegalFormatException - 类型不匹配(如用
%d格式化字符串)也会报错 -
%n推荐代替\n,保证跨平台换行一致性 - 中文环境下注意编码,一般 IDE 和控制台默认 UTF-8 时无问题
什么时候选哪个?
关键看是否需要字符串对象本身:
- 要记录日志、拼接到 JSON、存入变量、做条件判断 → 用
String.format - 只是简单调试输出、命令行反馈、实时展示 → 用
printf更简洁 - 若需多次复用同一格式,可先定义格式字符串常量,再传参,提升可读性和维护性

















