8

这四种格式化相同数据的方式有什么区别吗?

    // Solution 1
    System.out.printf("%.1\n",10.99f);

    // Solution 2
    System.out.format("%.1\n",10.99f);

    // Solution 3
    System.out.print(String.format("%.1\n",10.99f));

    // Solution 4
    Formatter formatter = new Formatter();
    System.out.print(formatter.format("%.1\n",10.99f));
    formatter.close();
4

4 回答 4

2

前两个完全相同,因为printf实现为 ( source )

public PrintStream printf(String format, Object ... args) {
    return format(format, args);
}

后两者也完全相同,因为String.format实现为 ( source )

public static String format(String format, Object ... args) {
    return new Formatter().format(format, args).toString();
}

最后,第 2 和第 4 大致相同,从PrintStream.format( source ) 的实现中可以看出。在引擎盖下,它还创建一个新的 Formatter(如果需要)并调用formatFormatter

public PrintStream format(String format, Object ... args) {
    try {
        synchronized (this) {
            ensureOpen();
            if ((formatter == null)
                || (formatter.locale() != Locale.getDefault()))
                formatter = new Formatter((Appendable) this);
            formatter.format(Locale.getDefault(), format, args);
        }
    } catch (InterruptedIOException x) {
        Thread.currentThread().interrupt();
    } catch (IOException x) {
        trouble = true;
    }
    return this;
}
于 2013-05-16T09:29:39.667 回答
1

System.out是一个PrintStream有关详细信息的链接:有关各种格式的详细信息

调用表单的这个方法

out.printf(Locale l, String format,Object... args)

行为方式与调用完全相同

out.format(Locale l,String format,Object... args)

所以 1 和 2 是相同的,它们之间没有任何区别。和 3 和 4 几乎相同,如果与 1 和 2 相比,只会存在编译时间差异。

于 2013-05-16T09:13:31.587 回答
0

System.out.printf(),System.out.format()是 的方法PrintStream。它们是等价的。

printf()只显示新格式化的字符串System.out,同时format()返回一个新的格式化字符串。

于 2013-05-16T09:29:31.420 回答
0

考虑到String.format()调用new Formatter().format()PrintWriter.printf()调用几乎相同,应该没有任何区别。

于 2013-05-16T09:14:27.270 回答