将Long转换为整数

Sri*_*san 287 java

如何将Long值转换为IntegerJava中的值?

Thi*_*ilo 472

Integer i = theLong != null ? theLong.intValue() : null;
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 这是最好的答案,因为它处理NULL值. (5认同)
  • @ViacheslavDobromyslov问题是关于Long值,而不是null值。而且我个人认为应该先拒绝null,而不要使用null in-> null out,从而通过我的应用程序传输null。因此,有人可能会说这是最糟糕的答案:-) (3认同)

Sea*_*oyd 121

这有三种方法:

Long l = 123L;
Integer correctButComplicated = Integer.valueOf(l.intValue());
Integer withBoxing = l.intValue();
Integer terrible = (int) (long) l;
Run Code Online (Sandbox Code Playgroud)

所有三个版本生成几乎相同的字节代码:

 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]
Run Code Online (Sandbox Code Playgroud)

  • 轻微的风格问题:你应该使用大写后缀`123L`来提高可读性. (12认同)
  • @SeanPatrickFloyd是的.不要忘记Long变量值有时可能为NULL. (2认同)
  • @ user64141 Java中的类型转换是一个复杂的问题.Casting Objects很好,因为你实际上并没有改变任何东西,只是以不同的方式查看同一个对象.但在这种情况下,你有一系列有意义的强制转换,从对象到原始,然后,通过自动装箱的疯狂,再到对象,即使语法暗示它是另一个原语.对我来说,这是对拳击和原始转换的误用.并非所有可以完成的事情都应该完成. (2认同)

bir*_*rdy 47

Integer intValue = myLong.intValue();
Run Code Online (Sandbox Code Playgroud)


Jac*_*ble 18

如果你想检查溢出并有番石榴方便,有Ints.checkedCast():

int theInt = Ints.checkedCast(theLong);
Run Code Online (Sandbox Code Playgroud)

实现很简单,并在溢出时抛出IllegalArgumentException:

public static int checkedCast(long value) {
  int result = (int) value;
  checkArgument(result == value, "Out of range: %s", value);
  return result;
}
Run Code Online (Sandbox Code Playgroud)


Jef*_*ter 8

你需要输入它.

long i = 100L;
int k = (int) i;
Run Code Online (Sandbox Code Playgroud)

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

如果您正在谈论盒装类型,请阅读文档.


Jas*_*ies 7

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

Integer intVal = longVal == null ? null : Math.toIntExact(longVal);
Run Code Online (Sandbox Code Playgroud)

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


Dus*_*pra 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);

        }
}
Run Code Online (Sandbox Code Playgroud)


Adi*_*Adi 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;
    }
Run Code Online (Sandbox Code Playgroud)