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

Java 進階:long 轉 int 三種方法與溢出風險深度解析

     編輯:Java 綜合教學

Java 進階:long 轉 int 三種方法與溢出風險深度解析

long → int 屬於窄化轉換,可能導致數據截斷溢出。本文對比三種轉換方式並分析風險。

方法一:強制類型轉換 (最常用、最高效)

long ll = 300000L;
int ii = (int) ll; // 直接截斷高 32 位

原理:丟棄高 32 位,保留低 32 位。若值超出 Integer.MAX_VALUE (2,147,483,647) 會產生負數或錯誤值。

方法二:調用 Long.intValue()

long ll = 300000L;
int ii = new Long(ll).intValue(); // 內部同樣執行 (int)ll

本質:包裝類委託給強制轉換,多一次對象創建開銷,無額外安全檢查。

方法三:字符串中轉 (最慢、可異常感知)

long ll = 300000L;
int ii = Integer.parseInt(String.valueOf(ll)); // 可能拋出 NumberFormatException

特點:通過字符串解析,若長整數字符串超出 int 範圍會拋異常,可作為「安全轉換」輔助手段。

溢出風險實測

long big = 3_000_000_000L; // 30億 > Integer.MAX_VALUE
System.out.println((int) big);        // -1294967296 (負數!)
System.out.println(new Long(big).intValue()); // -1294967296
// Integer.parseInt(String.valueOf(big)) // 拋出 NumberFormatException

最佳實踐建議

場景推薦方式理由
確信數值在 int 範圍內(int) longVal零開銷、字節碼單指令
需顯式檢查溢出Math.toIntExact(longVal) (Java 8+)溢出拋 ArithmeticException
數值來源不可信Integer.parseInt(String.valueOf(val))異常可捕獲,但性能差

💡 現代 Java 首選:Math.toIntExact(long) —— 既安全又語義清晰,JVM 內部優化極佳。

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