Java null双对象格式

时间:2013-10-03 06:37:47

标签: java string-formatting

这是Java的正确行为吗?

public static void main(String[] args) {
    String floatFormat = "%4.2f\n";
    Double d = null;
    String s = String.format("%4f\n" + floatFormat, d, d);
    System.out.print(s);
}

输出:

null
  nu

我的解决方法是硬编码“null”这个词,这很烦人。

String thing = (d != null) ? String.format(floatFormat, d) : "null\n";

1 个答案:

答案 0 :(得分:2)

在Javadoc中的“常规”格式类别(包括%s)下是:

  

精度是要写入输出的最大字符数。精度在宽度之前应用,因此即使宽度大于精度,输出也会被截断为精确字符。如果未指定精度,则字符数没有明确限制。

我有根据的猜测是,当格式化程序看到null时,它会将f转换切换为s,因为将字符串null格式化为float是没有意义的。然后它解释该上下文中的宽度和精度。字段宽度仍为4,但最大输出长度为2,右对齐,给出您看到的结果。

稍后在Javadoc就是:

  

除非另有说明,否则将null参数传递给此类中的任何方法或构造函数都将导致抛出NullPointerException。

所以我说有一个很好的案例可以向Oracle提交一个错误,因为规范明确指出你的案例需要NPE。