System.out.printf("%.2d",123);
获得12或23的输出似乎是合乎逻辑的,但是为什么他们选择将此错误呢?
...获得12或23 ...
的输出似乎是合乎逻辑的
否。对不起。错误。不正确的思维。
printf
方法根据其规范所说的行为,而不是"对您的逻辑" 1 。
Javadoc这样说:
"通用,字符和数字类型的格式指定器具有以下语法:
%[argument_index$][flags][width][.precision]conversion
可选的精度是一个非阴性十进制整数,通常用于限制字符的数量。特定的行为取决于转换。
字节,短,整数和长
[对于所有转换...]
精度不适用。如果指定了精度,则将抛出
IllegalFormatPrecisionException
。"
进一步阅读Formatter
的Javadocs表明%d
格式不支持整数数字的"截断"。
...为什么他们选择将此错误呢?
因为明显的运行时错误告诉您,代码中存在错误比产生意外结果的应用程序更好,该应用程序可能会经过测试和其他质量控制过程。
1-我认为,您的建议是违反逻辑的。那么谁应该获胜?两者都不!您应该阅读规格,而不是假设一切都可以像您认为应该有效的那样起作用。请注意,该原则适用于所有编程活动。如有疑问,请阅读规格!