System.out.printf("%.2d",123);
获取12或23的输出似乎是合乎逻辑的,但是为什么他们选择将其设为错误?
答案 0 :(得分:3)
...获得12或23的输出似乎是合乎逻辑的...
不。抱歉。错误。思维不正确。
printf
方法的行为取决于其规范所说的内容,而不是对您来说“似乎合乎逻辑的” 1 。
javadoc这样说:
“常规,字符和数字类型的格式说明符具有以下语法:
%[argument_index$][flags][width][.precision]conversion
可选精度是通常用于限制字符数的非负十进制整数。 具体行为取决于转换。
字节,短,整数和长
[用于所有转化...]
精度不适用。如果指定了精度,则将抛出
IllegalFormatPrecisionException
。”
进一步阅读Formatter
的javadocs会发现%d
格式不支持整数的“截断”。
...为什么他们选择改成错误?
因为明显的运行时错误告诉您代码中的错误比应用程序产生意外结果要好得多,而意外结果可能会超出测试和其他质量控制流程。
1-在我看来,您的建议是违反直觉的,不合逻辑。那么谁的“逻辑”应该获胜呢?都不行!您应该阅读规范,而不是假设一切工作都像您认为的那样。请注意,此原则适用于所有编程活动。如有疑问,请阅读规格!