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

Java 資料類型轉換完全指南:基本類型、包裝類、String 與 Date 互轉詳解

     編輯:Java 程式設計入門

前言

資料類型轉換是 Java 程式設計中最基礎也最頻繁的操作之一。從基本類型之間的擴大/縮小轉換,到包裝類的拆箱裝箱,再到 String、Date 與數值類型的複雜互轉,掌握完整的轉換體系對於撰寫健壯、高效的代碼至關重要。本文將系統梳理 Java 類型轉換的核心規則、API 與最佳實踐。

一、基本類型轉換:擴大與縮小

Java 將基本類型按「容量」分級:

(byte, short, char) → int → long → float → double
  • 擴大轉換 (Widening):低容量 → 高容量,**隱式自動完成**,無資料遺失風險。
    例:int i = 100; long l = i; // 自動
  • 縮小轉換 (Narrowing):高容量 → 低容量,**必須強制轉型**,可能導致溢位或精度遺失。
    例:double d = 3.14; int i = (int) d; // i=3,精度遺失

特殊規則:char 可視為無號整數參與運算,但轉 byte/short 需強制轉型;boolean 不參與任何數值轉換。

二、包裝類:基本類型的物件化外衣

每種基本類型對應一個包裝類:Byte, Short, Integer, Long, Float, Double, Character, Boolean。它們是不可變類別,提供豐富的工具方法。

2.1 裝箱與拆箱

  • 手動裝箱:Integer i = Integer.valueOf(100);(推薦,利用快取)
  • 手動拆箱:int val = i.intValue();
  • 自動裝箱/拆箱 (Java 5+):編譯器自動插入 valueOf()/xxxValue()。
    例:Integer i = 100; int val = i;

效能提示:Integer.valueOf() 預設快取 -128~127 範圍內的實例,頻繁創建大整數物件時考慮使用 new Integer() 或基本類型陣列。

2.2 包裝類間的數值轉換

所有數值包裝類繼承自 Number,提供統一的 xxxValue() 方法:

Double d = 3.14;
int i = d.intValue();     // 3
long l = d.longValue();   // 3
float f = d.floatValue(); // 3.14f

三、String 與其他類型互轉

3.1 String → 基本類型/包裝類

解析靜態方法(拋出 NumberFormatException):

  • Integer.parseInt("123") → int
  • Integer.valueOf("123") → Integer
  • Double.parseDouble("3.14"), Boolean.parseBoolean("true") 等

進制轉換:Integer.parseInt("FF", 16) (十六進位) → 255。

3.2 基本類型/包裝類 → String

  • String.valueOf(123) / String.valueOf(true)(通用、null 安全)
  • Integer.toString(123) / Double.toString(3.14)
  • 進制格式化:Integer.toBinaryString(10) → "1010", toHexString(255) → "ff", toOctalString(8) → "10"
  • obj.toString()(需確保物件非 null)

3.3 String 與 char/char[] 互轉

  • str.charAt(index) → 單一 char
  • str.toCharArray() → char[]
  • new String(charArray) / String.valueOf(charArray) → String

四、字元的數值轉換:ASCII vs 字面值

關鍵區別:

  • 字元碼值:'1' → (int)'1' = 49 (ASCII/Unicode 碼點)
  • 字面數值:Character.getNumericValue('1') = 1,支援 Unicode 數字字元(如羅馬數字、中文數字)。

五、Date 與其他類型互轉 (舊版 java.util.Date)

注意:現代開發強烈建議使用 java.time 套件。以下為舊版 API 快速參考:

5.1 建構 Date

  • 年月日:new Date(year-1900, month-1, day) (@Deprecated)
  • 完整時間:new Date(year-1900, month-1, day, hrs, min, sec) (@Deprecated)
  • 毫秒時間戳:new Date(System.currentTimeMillis()) 或 new Date(long ms)
  • 字串解析:new Date(String)(格式依賴實現,極不推薦)

5.2 Date → 數值/字串

  • getTime() → long 毫秒時間戳 (核心)
  • getYear()+1900, getMonth(), getDate(), getHours()... (@Deprecated)
  • toString() → "Dow Mon DD HH:MM:SS ZZZ YYYY"

5.3 現代替代方案:java.time (Java 8+)

// 當前時間
Instant now = Instant.now();           // 時間戳
LocalDateTime ldt = LocalDateTime.now(); // 本地日期時間
ZonedDateTime zdt = ZonedDateTime.now(); // 帶時區

// 互轉
long ms = now.toEpochMilli();           // → long
Instant ins = Instant.ofEpochMilli(ms); // long → Instant

// 格式化/解析
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String str = ldt.format(fmt);
LocalDateTime parsed = LocalDateTime.parse(str, fmt);

六、總結與最佳實踐清單

  1. **優先使用基本類型**,避免不必要的裝箱拆箱開銷。
  2. **字串解析數值**務必捕獲 NumberFormatException,並考慮輸入驗證。
  3. **財務/精密計算**嚴禁使用 float/double,改用 BigDecimal。
  4. **日期時間處理**全面遷移至 java.time,棄用 java.util.Date、Calendar、SimpleDateFormat(非執行緒安全)。
  5. **進制轉換**使用 Integer.toXxxString 系列方法,清晰可讀。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved