将Long转换为整数

时间:2011-04-27 12:24:07

标签: java

如何在Java中将Long值转换为Integer值?

13 个答案:

答案 0 :(得分:443)

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

或者如果您不需要担心null:

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

在这两种情况下,您可能会遇到溢出(因为Long可以存储比Integer更宽的范围)。

Java 8有一个帮助方法来检查溢出(在这种情况下你得到一个例外):

Integer i = theLong == null ? null : Math.toIntExact(theLong);

答案 1 :(得分:119)

以下是三种方法:

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]

答案 2 :(得分:46)

Integer intValue = myLong.intValue();

答案 3 :(得分: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 :(得分:8)

你需要输入强制转换它。

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

请记住,long的范围大于int,因此您可能会丢失数据。

如果您正在谈论盒装类型,请阅读documentation

答案 5 :(得分:6)

如果您使用的是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);

        }
}

答案 6 :(得分:5)

最简单的方法是:

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;
    }

答案 7 :(得分:3)

假设不是null longVal

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

例如,你可以获得一个可以是Integer或Long的Object。我知道这很难看,但它发生了......

答案 8 :(得分:3)

在Java 8中,您可以使用toIntExact。如果要处理null值,请使用:

Integer intVal = longVal == null ? null : Math.toIntExact(longVal);

这个方法的好处是,如果参数(long)溢出int,它会抛出ArithmeticException

答案 9 :(得分:0)

长访客= 1000;

int convVisitors =(int)visitor;

答案 10 :(得分:0)

尝试一下:

Int i = Long.valueOf(L)// L:长值

答案 11 :(得分:0)

除了@Thilo可接受的答案之外,Math.toIntExact在可选方法链接中也很有效,尽管它仅接受int作为参数

Long coolLong = null;
Integer coolInt = Optional.ofNullable(coolLong).map(Math::toIntExact).orElse(0); //yields 0

答案 12 :(得分:-2)

在java中,有一种严格的方法可以将long转换为int

不仅lnog可以转换为int,任何类型的扩展Number一般可以转换为其他Number类型,这里我将向您展示如何将long转换为int,反之亦然。

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