CodeGym /Java Blog /Toto sisi /如何在 Java 中將 long 轉換為 int
John Squirrels
等級 41
San Francisco

如何在 Java 中將 long 轉換為 int

在 Toto sisi 群組發布
在本文中,我們將解釋如何在 Java 中將long轉換為int,並編寫一些代碼示例。由於long是比int更大的數據類型,所以這裡我們應該使用類型轉換來進行這種轉換。您可能已經知道Java 中的longint都是原始數據類型。這意味著它們不是類對象。所有對象和數組都存儲在堆空間中,而基本類型(如intlong)存儲在堆棧內存中。 Longint有點相似。整數表示整數,可以是正數、負數或零。既int是整數類型,因此它們在某種程度上是兼容的。問題是,long類型的範圍是-263到263-1,或者-9223372036854775808到9223372036854775807。也就是說,Java程序為long類型分配了64位。同時,int類型占32位,可以放-231×231-1之間的數,也可以放-2147483648到2147483647之間的數。這意味著任意數量的int類型都可以很容易地放入一個型。在 Java 中,當使用基元時,從較窄類型到較寬類型的轉換是自動的。換句話說,它被稱為加寬。

int myInt= 18;
long myLong= 16000;
       myLong = myInt;
這裡我們將一個int分配給一個long變量。一切都進行得很順利,在一個更大的範圍內,一個較小的範圍安靜地適合,除了內存空間我們沒有丟失任何東西。順便說一句,當我們聲明一個long類型的變量並定義它的值時,最好將字母l分配給它,這在我們處理int範圍之外的數字時會派上用場。

long myVeryLong = 10000000000l;

Java long 到 int 的轉換

現在讓我們回到本文的主要任務——Java longint 的轉換。問題是更大的東西並不總是適合更小的東西。所以這裡我們不能在 Java 中自動將“smaller”變成“bigger”。如果我們嘗試像前面的示例一樣操作,反之亦然:

//example without typecasting…nice trying! 
public static void main(String[] args) {

int myInt= 18;
long myLong= 16000;
       myInt = myLong;
}
Java 編譯器不會讓我們這樣做並且會拋出一個錯誤。所以對於這個操作,我們需要用到所謂的類型轉換。這個過程稱為縮小類型轉換。要縮小變量的範圍,您需要明確指定要將值轉換為的類型。這是一個示例,我們將嘗試將一個“小” long 數字放入int(應該適合)和兩個超出int範圍的“大” long數字。

public class longToInt {

   public static void main(String[] args) {

       int myInt = 18;
       long myLong = 16000;
       long myVeryLong = 2147483648l;//l in the end means ‘long’ 
       long myVeryLong = 10000000000l;

       myInt = (int) myLong;
       System.out.println(myInt);
       myInt = (int) oneMoreLong;
       System.out.println(myInt);
       myInt = (int) myVeryLong;
       System.out.println(myInt);
   }
}
我們已經通知編譯器我們要將long值放入一個int變量中,我們對該決定的後果負責。編譯器看到一個更窄類型的明確指示,執行轉換。結果,我們得到了輸出:
16000 -2147483648 141006540​​8
好吧,16000 絕對是我們期望看到的,但為什麼 -2147483648 中是負號?這個 141006540​​8 是什麼意思?事實上,這些數字存儲在一個long變量中,我們記得它佔用 64 位。我們試圖將這些數字放入一個只能存儲 32 位的int變量中。通常,這 32 個單元格將包含數前 32 位的 0 和 1,其餘的將被簡單地丟棄。因此,如果原始數字不適合 32 位,那麼不適合的那些位將被簡單地丟棄。這就是為什麼我們只有正確的數字 16000,因為它佔用的空間少於 32 位。

Java 8 long 到 int 的轉換

在 Java 8 中,Math類有一個新方法可以將long轉換為int。這裡是:

Math.toIntExact(value);
這個方法最好的地方是它控制轉換後數字的長度,如果值太大而不適合 int 它會拋出異常。讓我們看看它在我們的示例中是如何工作的:

public class intToLong {

   public static void main(String[] args) {

       int myInt = 18;
       long myLong = 16000;
       long oneMoreLong = 2147483648l;
       long myVeryLong = 10000000000l;
      
       System.out.println(Math.toIntExact(myLong));
       int y = Math.toIntExact(oneMoreLong);
       System.out.println(oneMoreLong);
       System.out.println(Math.toIntExact(myVeryLong));
   }
}
輸出是:
線程“main”中的 16000 異常 java.lang.ArithmeticException:整數溢出在 java.base/java.lang.Math.toIntExact(Math.java:1080) 在 intToLong.main(intToLong.java:13)
因此,程序打印了唯一正確轉換的數字 16000,然後當試圖將超出範圍的數字 2147483648l 壓入int時,該方法拋出異常。所以我們沒有丟棄位的問題,就像經典的 Java longint轉換的情況一樣。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION