Java 長整型與整型轉換完全指南:基本類型與包裝類雙向互轉
實戰中頻繁遇到 long ↔ int、Long ↔ Integer 互轉,區分「基本類型」與「包裝類」是關鍵。本文整理四種場景的標準寫法,附原理說明。
一、 基本類型轉換(無包裝類參與)
| 方向 | 代碼 | 說明 |
long → int | long a = 10L; int b = (int) a; | 強制轉型,可能溢出截斷高位 |
int → long | int a = 10; long b = a; | 自動加寬,無損精度 |
二、 包裝類轉基本類型(拆箱)
| 方向 | 代碼 | 說明 |
Long → int | Long a = 10L; int b = a.intValue(); | 調用包裝類 intValue() |
Integer → long | Integer a = 10; long b = a.longValue(); | 調用包裝類 longValue() |
三、 基本類型轉包裝類(裝箱)
| 方向 | 推薦寫法 | 替代寫法 | 說明 |
int → Integer | Integer a = 10; (自動裝箱) | Integer.valueOf(10) | 優先用自動裝箱或 valueOf 享緩存 |
long → Long | Long a = 10L; | Long.valueOf(10L) | 同理 |
四、 包裝類互轉(長整型包裝類 ↔ 整型包裝類)
無直接轉換方法,需經基本類型中轉:
Long l = 100L;
Integer i = l.intValue(); // Long → int → Integer (自動裝箱)
// 反向
Integer i2 = 100;
Long l2 = i2.longValue(); // Integer → long → Long (自動裝箱)
五、 避坑提醒
- 溢出風險:
long → int 強轉時,超出 Integer.MAX_VALUE 會截斷高位,導致數值錯誤。
- NullPointerException: 包裝類為
null 時調用 intValue()/longValue() 會拋 NPE,**使用前必判 null**。
- 自動裝箱緩存:
Integer.valueOf(-128~127) 返回緩存對象,Long 同理(緩存範圍同)。比較值請用 equals()。
六、 一表總覽
| 來源 | 目標 | 代碼範例 |
| long (基本) | int (基本) | int b = (int) a; |
| Long (包裝) | int (基本) | int b = a.intValue(); |
| int (基本) | long (基本) | long b = a; |
| Integer (包裝) | long (基本) | long b = a.longValue(); |
| int (基本) | Integer (包裝) | Integer a = 10; |
| long (基本) | Long (包裝) | Long a = 10L; |
| Long (包裝) | Integer (包裝) | Integer i = l.intValue(); |
| Integer (包裝) | Long (包裝) | Long l = i.longValue(); |