2011-04-27 191 views

回答

361
Integer i = theLong != null ? theLong.intValue() : null; 

,或者如果你不需要擔心空:

// auto-unboxing does not go from Long to int directly, so 
Integer i = (int) (long) theLong; 

而在這兩種情況下,你可能會遇到溢出(因爲龍可以存儲更廣泛的比整數)。

+4

這是最好的答案,因爲它處理NULL值。 – 2014-04-06 01:05:43

+1

@ViacheslavDobromyslov問題是關於Long值,而不是空值。而且我個人認爲先拒絕null,而不是在null中使用null,從而在我的應用程序中傳輸null。所以有人可能會認爲這是最糟糕的答案:-) – 2015-06-11 15:46:08

+1

爲什麼當你只需調用'intValue'而不是兩次?此外,它將取消長框,轉換爲int,並將rebox重新設置爲「Integer」,這看起來不是很有用。我沒有看到我頭頂上的重點,你有這個好理由嗎? – Dici 2016-07-14 00:09:03

5

你需要輸入它。

long i = 100L; 
int k = (int) i; 

請記住,長整數的範圍比整數大,因此可能會丟失數據。

如果您正在談論盒裝類型,請閱讀documentation

40
Integer intValue = myLong.intValue(); 
+0

看起來比(int) (很長)imo。 – 2013-12-10 20:41:32

+2

它不適用於NULL值 – 2014-03-08 08:35:20

+0

@ViacheslavDobromyslov是的,你是對的。這很明顯 – birdy 2014-04-04 08:56:16

106

這裏有三種方法可以做到這一點:

Long l = 123L; 
Integer correctButComplicated = Integer.valueOf(l.intValue()); 
Integer withBoxing = l.intValue(); 
Integer terrible = (int) (long) l; 

所有三個版本的產生幾乎相同的字節碼:

0 ldc2_w <Long 123> [17] 
3 invokestatic java.lang.Long.valueOf(long) : java.lang.Long [19] 
6 astore_1 [l] 
// first 
7 aload_1 [l] 
8 invokevirtual java.lang.Long.intValue() : int [25] 
11 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [29] 
14 astore_2 [correctButComplicated] 
// second 
15 aload_1 [l] 
16 invokevirtual java.lang.Long.intValue() : int [25] 
19 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [29] 
22 astore_3 [withBoxing] 
// third 
23 aload_1 [l] 
// here's the difference: 
24 invokevirtual java.lang.Long.longValue() : long [34] 
27 l2i 
28 invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [29] 
31 astore 4 [terrible] 
+10

小問題:您應該使用大寫後綴'123L'來提高可讀性。 – Joey 2012-07-12 12:48:49

+0

或者你可以使用一個很好的字體......然後我們再次去......:D(只是j/k,我也是這麼做的) – davidcesarino 2013-03-31 22:22:22

+3

它不適用於NULL值 – 2014-03-08 08:35:02

-3

在java中,有轉換很長的一個嚴格的方法to int

不僅lnog可以轉換爲int,任何類型的類都可以擴展Number可以轉換爲其他Numbe一般來說,在這裏我會告訴你如何將long轉換爲int,反之亦然。

Long l = 1234567L; 
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class); 
+4

過於複雜! – genobis 2013-04-05 13:38:50

+10

我想你忘了在某處創建一個抽象工廠 – Mehrdad 2014-06-27 09:37:37

18

如果你關心檢查溢出,並有Guava得心應手,有Ints.checkedCast()

int theInt = Ints.checkedCast(theLong); 

The implementation是死的簡單,和溢出拋出IllegalArgumentException

public static int checkedCast(long value) { 
    int result = (int) value; 
    checkArgument(result == value, "Out of range: %s", value); 
    return result; 
} 
4

最好簡單的做法是:

public static int safeLongToInt(long longNumber) 
    { 
     if (longNumber < Integer.MIN_VALUE || longNumber > Integer.MAX_VALUE) 
     { 
      throw new IllegalArgumentException(longNumber + " cannot be cast to int without changing its value."); 
     } 
     return (int) longNumber; 
    } 
2

假設不爲空longVal

Integer intVal = ((Number)longVal).intValue(); 

y您得到一個對象,可以是整數或長時間工作的例子。我知道這是醜陋的,但它發生......

4

如果您使用的是Java 8就做如下

import static java.lang.Math.toIntExact; 

    public class DateFormatSampleCode { 
     public static void main(String[] args) { 
      long longValue = 1223321L; 
      int longTointValue = toIntExact(longValue); 
      System.out.println(longTointValue); 

     } 
} 
0

長參觀者= 1000;

int convVisitors =(int)visitor;