首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 輸出三劍客:print、printf、println 差異全解析與格式化實戰

     編輯:Java 相關知識

System.out 是 Java 開發者接觸最早的「朋友」,旗下 print()、println()、printf() 三個方法雖然都能把東西印到控制台,但行為差異巨大。本文從原理、語法、格式化佔位符、對齊控制三個維度徹底釐清,並附上可直接複製運行的實戰代碼。

一、核心差異一覽表

方法換行行為格式化能力典型用途
print(x)不換行,游標停留在輸出末尾無,直接輸出 toString() 結果提示輸入、同行拼接輸出
println(x)輸出後自動換行(相當於 print(x + "\n"))無行輸出、日誌、除錯列印
printf(fmt, args)不自動換行,需在格式字串含 %n強,C 風格格式化字串報表對齊、數值精度控制、結構化輸出

二、printf 格式化字串完全指南

語法:%[flags][width][.precision]conversion

1. 常用轉換字符

%d  十進制整數 (byte/short/int/long)
%o  八進制整數
%x/%X 十六進制整數 (小寫/大寫)
%f  十進制浮點數 (預設 6 位小數)
%e/%E 科學記號
%g/%G 根據精度自動選 %f 或 %e
%a/%A 十六進制浮點數 (精確表達)
%s  字串
%c  字元
%b  布林值
%n  平台相關換行符 (Windows \r\n, Linux \n) 強烈建議用 %n 代替 \n
%%  輸出字面 % 符號

2. 旗標

-   左對齊 (預設右對齊)
+   數值強制顯示正負號
0   數值不足寬度時前導補 0
,   數值加千分位分隔符
(   負數用括號包裹而非減號
空格 正數前加空格,負數前加負號 (對齊用)

3. 寬度與精度

  • %10d:最小寬度 10,不足右對齊補空格
  • %05d:寬度 5,不足前導補 0 → 00042
  • %.2f:保留 2 位小數 → 3.14
  • %10.2f:寬度 10 含小數點,保留 2 位小數

三、實戰代碼:從入門到對齊報表

public class PrintDemo {
    public static void main(String[] args) {
        int i = 42;
        double d = 3.1415926;
        String name = "Java";

        // 1. 基本差異
        System.out.print("print: 不換行 -> ");
        System.out.println("println: 自動換行");
        System.out.printf("printf: 格式化 -> i=%d, d=%.2f%n", i, d);

        // 2. 精度控制
        System.out.printf("預設浮點: %f%n", d);        // 3.141593
        System.out.printf("兩位小數: %.2f%n", d);      // 3.14
        System.out.printf("科學記號: %e%n", d);        // 3.141593e+00

        // 3. 寬度與對齊:產生整齊表格
        System.out.println("\n--- 價目表 ---");
        System.out.printf("%-10s %8s %10s%n", "商品", "單價", "小計");
        System.out.printf("%-10s %8.2f %10.2f%n", "蘋果", 15.5, 15.5 * 2);
        System.out.printf("%-10s %8.2f %10.2f%n", "香蕉", 22.0, 22.0 * 3);
        System.out.printf("%-10s %8.2f %10.2f%n", "橘子", 18.8, 18.8 * 1.5);

        // 4. 旗標組合:千分位、正負號、補零
        int big = 1234567;
        System.out.printf("%n千分位: %,d%n", big);           // 1,234,567
        System.out.printf("強制正負: %+d, %+d%n", 42, -42);   // +42, -42
        System.out.printf("前導補零: %08d%n", 42);           // 00000042

        // 5. 日期時間格式化 (Java 5+ 支援 %t 系列)
        System.out.printf("%n現在時間: %tF %tT%n", System.currentTimeMillis(), System.currentTimeMillis());
        // 輸出: 2024-05-20 14:30:45
    }
}

四、執行結果展示

print: 不換行 -> println: 自動換行
printf: 格式化 -> i=42, d=3.14
預設浮點: 3.141593
兩位小數: 3.14
科學記號: 3.141593e+00

--- 價目表 ---
商品       單價       小計
蘋果        15.50       31.00
香蕉        22.00       66.00
橘子        18.80       28.20

千分位: 1,234,567
強制正負: +42, -42
前導補零: 00000042

現在時間: 2024-05-20 14:30:45

五、避坑提醒

  1. 參數順序與類型必須匹配:%d 對應 int/long,傳 double 會拋 IllegalFormatConversionException。
  2. 缺少參數:格式字串佔位符數量 > 實際參數數量 → MissingFormatArgumentException。
  3. 多餘參數:被忽略,不報錯但可能隱藏 Bug。
  4. 不要在高頻迴圈用 printf:解析格式字串有開銷,熱路徑優先用 print/println 或 StringBuilder。
  5. 跨平台換行:永遠用 %n,別寫死 \n 或 \r\n。

結語

print 適合無插行拼接,println 是行輸出主力,printf 則是格式化報表、對齊、精度控制的利器。掌握 %[flags][width][.precision]conversion 語法,能讓控制台輸出從「能看」變「好看、好用、可解析」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved