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

Java 常見類型轉換總匯:基本類型、包裝類、String 互轉完整指南

     編輯:Java 相關知識

核心轉換矩陣

來源類型目標類型推薦方式備註
StringintInteger.parseInt(str)拋 NumberFormatException,高性能
StringIntegerInteger.valueOf(str)返回包裝類,利用緩存池(-128~127)
intStringString.valueOf(i)null 安全,效率最高
intIntegerInteger.valueOf(i)自動裝箱,優先用緩存
Integerintinteger.intValue()自動拆箱,注意 NPE
StringlongLong.parseLong(str)同 int
StringdoubleDouble.parseDouble(str)科學計數法支援
StringfloatFloat.parseFloat(str)精度較低
StringbooleanBoolean.parseBoolean(str)僅 "true"(忽略大小寫) 為 true
StringDateLocalDate.parse(str, formatter)Java 8+ 推薦 java.time

詳細場景與代碼範例

1. String → 基本類型 (parseXxx)

int i = Integer.parseInt("123");           // 123
long l = Long.parseLong("12345678901");    // 12345678901
double d = Double.parseDouble("3.14159");  // 3.14159
boolean b = Boolean.parseBoolean("true");  // true

異常處理:統一捕獲 NumberFormatException,業務邏輯中建議封裝工具方法返回 Optional 或預設值。

2. 基本類型 → String (String.valueOf / toString)

String s1 = String.valueOf(123);      // "123" (推薦,null 安全)
String s2 = Integer.toString(123);    // "123"
String s3 = 123 + "";                 // "123" (編譯器優化為 StringBuilder)
String s4 = String.valueOf(3.14);     // "3.14"

3. String ↔ 包裝類 (valueOf / toString)

// String → Integer
Integer boxed = Integer.valueOf("123");  // 緩存池優化
// Integer → String
String str = boxed.toString();           // "123"

// 通用模板
public static  T parse(String s, Function parser) {
    try { return parser.apply(s); } 
    catch (Exception e) { return null; }
}
// 用法:parse("123", Integer::valueOf)

4. 基本類型與包裝類自動裝箱/拆箱

Integer i = 100;        // 裝箱:Integer.valueOf(100)
int primitive = i;      // 拆箱:i.intValue()

// 陷阱:緩存池範圍 -128~127
Integer a = 127, b = 127;  // a == b → true
Integer c = 128, d = 128;  // c == d → false (需用 equals)

5. 日期時間轉換 (Java 8+ java.time)

// String → LocalDate
LocalDate date = LocalDate.parse("2024-01-15");           // ISO 格式
LocalDate date2 = LocalDate.parse("2024/01/15", 
    DateTimeFormatter.ofPattern("yyyy/MM/dd"));

// LocalDate → String
String iso = date.toString();                             // "2024-01-15"
String custom = date.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"));

// 舊版 java.sql.Date 互轉
java.sql.Date sqlDate = java.sql.Date.valueOf("2024-01-15");
String sqlStr = sqlDate.toString();

6. 進制轉換

// 任意進制 → 十進制
int dec = Integer.parseInt("FF", 16);     // 255
int dec2 = Integer.parseInt("1111", 2);   // 15

// 十進制 → 任意進制字串
String hex = Integer.toHexString(255);    // "ff"
String bin = Integer.toBinaryString(15);  // "1111"
String oct = Integer.toOctalString(63);   // "77"
String custom = Integer.toString(255, 16); // "ff" (指定基數)

自定義通用轉換工具類

public final class ConvertUtils {
    private ConvertUtils() {}
    
    public static Integer toInteger(Object obj) {
        if (obj == null) return null;
        if (obj instanceof Integer) return (Integer) obj;
        if (obj instanceof Number) return ((Number) obj).intValue();
        if (obj instanceof String) {
            String s = ((String) obj).trim();
            if (s.isEmpty()) return null;
            try { return Integer.parseInt(s); } 
            catch (NumberFormatException ignored) {}
        }
        return null;
    }
    
    // Long, Double, Boolean, LocalDate 同理...
    
    public static String toString(Object obj) {
        return obj == null ? null : String.valueOf(obj);
    }
}

避坑指南

  • NPE 風險:拆箱前必須非空判斷,或用 Optional.ofNullable()。
  • 精度丟失:float/double 財務計算禁用,改用 BigDecimal。
  • 緩存池誤區:Integer.valueOf() 緩存 -128~127,new Integer() 每次新建對象(已棄用)。
  • 預設 Locale:String.format、toLowerCase 等受系統 Locale 影響,跨平台請顯式指定 Locale.ROOT。
  • 舊 API 棄用:Date、SimpleDateFormat 非線程安全,全面遷移至 java.time。

總結

Java 類型轉換核心在於「基本類型 ↔ 包裝類 ↔ String」三角互轉。掌握 parseXxx、valueOf、toString、String.valueOf 四大核心方法,配合 Java 8 java.time 處理日期,並封裝通用工具類統一異常處理,即可應對 99% 業務場景。切記:拆箱防 NPE、金額用 BigDecimal、日期用 java.time。

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