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

Java 數據類型轉換完全指南:基本類型、包裝類、字符串與日期

     編輯:Java 相關知識

一、Java 基本數據類型速覽

類型位數範圍 / 說明
byte8-bit-128 ~ 127
short16-bit-32,768 ~ 32,767
int32-bit-2^31 ~ 2^31-1
long64-bit-2^63 ~ 2^63-1
float32-bitIEEE 754 單精度
double64-bitIEEE 754 雙精度
char16-bitUnicode 0 ~ 65,535
boolean—true / false

註:Java 無 unsigned 類型;char 本質是無符號整數。

二、基本類型之間的轉換

1. 自動類型提升(隱式轉換)

從低精度向高精度:byte/short/char → int → long → float → double

byte b = 10;
int i = b;        // 自動提升
double d = b;     // 自動提升

特例:char 轉 int 會得到 Unicode 碼值(如 'c' → 99)。byte/short/char 之間不直接自動轉換,需強轉。

2. 強制類型轉換(窄化轉換)

高精度 → 低精度,可能丟失精度或溢出:

int i = 200;
byte b = (byte) i;  // -56(溢出)
double d = 3.14;
int i2 = (int) d;   // 3(截斷小數)

3. 包裝類作為中介轉換

每種基本類型對應一個包裝類:Byte, Short, Integer, Long, Float, Double, Character, Boolean。

// 基本類型 → 包裝類(自動裝箱)
Integer obj = 100;

// 包裝類 → 其他基本類型
double d = obj.doubleValue();
int i = obj.intValue();

// 靜態工廠方法
Integer.valueOf(100);  // 推薦,有緩存
new Integer(100);      // 不推薦,已棄用

三、字符串與其他類型互轉

1. 其他類型 → String

  • String.valueOf(obj)(通用,null 安全)
  • obj.toString()(需對象非 null)
  • 基本類型 + ""(簡潔但生成 StringBuilder)
  • 包裝類靜態方法:Integer.toString(100)

2. String → 基本類型 / 包裝類

int i = Integer.parseInt("100");      // 基本類型
Integer obj = Integer.valueOf("100"); // 包裝類
double d = Double.parseDouble("3.14");
boolean b = Boolean.parseBoolean("true");

異常處理:格式錯誤拋 NumberFormatException,建議捕獲或預校驗。

3. 字符數字 → 數值

char c = '5';
int val = Character.getNumericValue(c); // 5
int val2 = c - '0';                     // 5(僅限 0-9)

四、日期類型轉換

1. Date ↔ long(毫秒時間戳)

Date date = new Date();
long ts = date.getTime();        // Date → long
Date date2 = new Date(ts);       // long → Date

2. Date ↔ int(年月日時分秒拆分)

使用 Calendar 或 Java 8 LocalDateTime:

// 獲取年月日
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);

3. Date ↔ String(格式化/解析)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(date);   // Date → String
Date parsed = sdf.parse(str);    // String → Date(拋 ParseException)

線程安全:SimpleDateFormat 非線程安全,建議用 ThreadLocal 或 Java 8 DateTimeFormatter。

五、常見坑與最佳實踐

  1. 浮點數精度:財務計算嚴禁用 float/double,請用 BigDecimal。
  2. 自動拆裝箱 NPE:Integer obj = null; int i = obj; 拋 NPE,判空後再拆箱。
  3. 字符串解析異常:Integer.parseInt("1.0") 拋異常,先驗證格式。
  4. 日期格式化線程安全:並發環境下勿共享 SimpleDateFormat 實例。
  5. 優先使用 Java 8 Time API:LocalDate, LocalDateTime, Instant, DateTimeFormatter 更現代、線程安全。

總結

Java 類型轉換看似基礎,實則暗藏許多陷阱。掌握「自動提升、強制轉換、包裝類中介、字符串解析、日期格式化」五大核心場景,並遵循最佳實踐,能讓代碼更健壯、可維護。

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