Java 中 `printf` 方法的参数格式要求

18 阅读1分钟

根本原因

System.out.printf() 方法的第一个参数是格式字符串,后面的参数是要插入的值

正确的用法

String id = "A123";
String name = "张三";

// 正确:第一个参数是格式字符串,包含占位符 %s
System.out.printf("ID=%s, name=%s\n", id, name);
// 输出:ID=A123, name=张三

错误分析

// 错误:第一个参数被当作格式字符串,但其中没有占位符
System.out.printf(id, name);

这种情况下:

  • id 被当作格式字符串(比如 "A123"
  • name 是要插入的值
  • 但由于格式字符串 "A123" 中没有 %s 这样的占位符,所以 name 不会被输出

更清楚的例子

String id = "Hello %s";  // 格式字符串中有占位符
String name = "World";

System.out.printf(id, name);
// 输出:Hello World
// 这种情况下能输出两个,因为 id 字符串中包含了 %s

其他正确写法

// 方法1:使用 printf 的格式字符串
System.out.printf("ID=%s, name=%s\n", id, name);

// 方法2:使用字符串拼接
System.out.println("ID=" + id + ", name=" + name);

// 方法3:使用 String.format
String result = String.format("ID=%s, name=%s", id, name);
System.out.println(result);

// 方法4:使用 MessageFormat
System.out.println(MessageFormat.format("ID={0}, name={1}", id, name));

总结

printf 的第一个参数必须是包含占位符的格式字符串,后面的参数才会被替换进去。如果没有占位符,额外的参数就会被忽略。