格式化相同数据的方式很多

时间:2013-05-16 09:05:25

标签: java formatting

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

    // 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 个答案:

答案 0 :(得分: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.formatsource)的实现可以看出。在引擎盖下,它也创造了一个新的 Formatter(如果需要)并在format上调用Formatter

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;
}

答案 1 :(得分:1)

System.outPrintStream有关详细信息,请点击此链接:Details about various format

调用

形式的此方法

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

的行为方式与调用

完全相同

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

所以1& 2是相同的b / w它们没有任何区别。 和3&如果与1和1相比,那么只有相同的编译时间差。 2。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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