输出为“42 null 3.14”,因%d不接受null故该行会抛IllegalFormatConversionException;String.format("Hello %2$s, you are %1$d years old", 25, "Alice")输出“Hello Alice, you are 25 years old”;可用“姓名:%1$s,年龄:%2$d,城市:%3$s”实现;高频调用有性能隐患,因每次新建Formatter对象,应改用StringBuilder或预编译MessageFormat;String.format线程安全但非高效;String.format("%d %d", 10)抛MissingFormatArgumentException;%05d输出“00007”,%-5d输出“7 ”。

Java 中 String.format() 是高频面试考点,常被用来考察候选人对格式化语法、类型安全、异常处理及底层原理的理解。题目设计应避免死记硬背,侧重实际场景辨析和常见陷阱。
基础语法与类型匹配题
考查是否掌握常用转换符及其对应参数类型,比如 %d 只接受整型(int/long),%s 接受任意对象(调用 toString()),%f 要求数值类型。可设陷阱:传入 null 给 %d 会抛 IllegalFormatConversionException;用 %s 格式化 null 得到字符串 "null",而非空指针异常。
- 写出输出结果:
String.format("%d %s %.2f", 42, null, 3.1415) - 以下哪行会抛出运行时异常?为什么?
占位符与参数顺序题
重点验证是否理解位置索引(如 %1$s)、重复引用、乱序使用。这是实际开发中易错点,尤其在国际化或模板复用场景。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 解释
String.format("Hello %2$s, you are %1$d years old", 25, "Alice")的输出 - 能否用
String.format实现 “姓名:张三,年龄:28,城市:北京” 且只传三个参数一次?如何写?
线程安全与性能辨析题
强调 String.format() 内部使用 Formatter 类,每次调用都新建对象,不适合高频循环拼接;对比 StringBuilder 和 MessageFormat 在多线程/大量日志场景下的适用性。
立即学习“Java免费学习笔记(深入)”;
- 高并发下频繁调用
String.format("id=%d, name=%s", id, name)是否有性能隐患?如何优化? -
String.format是否线程安全?为什么?
异常与边界情况题
测试对异常类型的敏感度和调试意识。例如参数个数不匹配(MissingFormatArgumentException)、精度超出范围、日期格式非法等。
- 执行
String.format("%d %d", 10)抛什么异常?堆栈关键信息是什么? - 以下代码输出什么?
String.format("%05d", 7)vsString.format("%-5d", 7)
%s,而是能不能说出“为什么这里不能用 %d”,以及“换种写法会不会更稳”。

















