System.out.printf()用法

NoO*_*One 5 java string formatting

我是Java新手.在学习这种printf方法时,我遇到了以下问题:

以下程序的输出是什么?

System.out.printf("%1$d + %b", 456, false);
System.out.println();
System.out.printf("%1$d + %b", 456);
Run Code Online (Sandbox Code Playgroud)

答案是:

456 + true
456 + true
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解如果没有我传递它是如何真实的?

孙兴斌*_*孙兴斌 7

1$被称为显式索引,连续格式%1$d不会导致索引的增量,因此它也将456用于格式化%b,并根据doc:

如果参数arg为null,则结果为"false".如果arg是布尔值或布尔值,则结果是String.valueOf(arg)返回的字符串.否则,结果为"true".

这就是你总能得到的原因true.

弄错:

System.out.printf("%1$d + %b", null); // null + false
Run Code Online (Sandbox Code Playgroud)

或删除显式索引:

System.out.printf("%d + %b", 456, null); // 456 + false
Run Code Online (Sandbox Code Playgroud)

查看文档java.uti.Formatter了解更多信息.

  • 你还应该解释一下,对于没有显式(`#$`)或相对(`<`)索引的格式说明符,如`%b`,索引通常从1开始,并随着每个连续的格式说明符而增加,但是当你混合格式时索引和没有索引的说明符,没有*的说明符因为指定索引而没有*前进.因此,`%b`仍然指向*first*参数. (3认同)