出于好奇,我尝试创建一个非常大的字符串。事实证明,Formatter
班级因宽度规格超过而窒息Integer.MAX_VALUE
:
// Produces an empty string. (2147483648 = Integer.MAX_VALUE + 1)
String.format("%2147483648s", "");
所以我去验证它确实符合规范。但它所说的只是
如果格式说明符包含具有无效值或不受支持的宽度或精度,则将分别抛出 IllegalFormatWidthException 或 IllegalFormatPrecisionException。
所以在我看来,正确的行为是抛出一个IllegalFormatWidthException
.
这个错误(?)是否记录在某处?(如果没有,我会去报告它。)
另外,应该注意的是,如果将 a-
放在宽度前面(左对齐输出):
String.format("%-2147483648s", "");
它确实抛出了一个MissingFormatWidthException
(在我看来,这似乎是正确的行为)。
(我使用的是 OpenJDK 版本 1.6.0_20。)