如何在Java中将long转换为int?

如何在Java中将long转换为int?

简单的types铸造应该这样做:

long l = 100000; int i = (int) l; 

但是,请注意,大数(通常大于2147483647 ,小于-2147483648 )会丢失一些比特,并且表示不正确。

例如, 2147483648将被表示为-2147483648

 Long x = 100L; int y = x.intValue(); 

对于小的值,铸造就足够了:

 long l = 42; int i = (int) l; 

但是, long可以比int更容纳更多的信息,所以在一般情况下不可能完全地从long转换为int 。 如果long小于或等于Integer.MAX_VALUE ,则可以通过强制转换而不丢失任何信息。

例如,下面的示例代码:

 System.out.println( "largest long is " + Long.MAX_VALUE ); System.out.println( "largest int is " + Integer.MAX_VALUE ); long x = (long)Integer.MAX_VALUE; x++; System.out.println("long x=" + x); int y = (int) x; System.out.println("int y=" + y); 

在我的机器上产生以下输出:

 largest long is 9223372036854775807 largest int is 2147483647 long x=2147483648 int y=-2147483648 

注意y上的负号。 由于x保存的值比Integer.MAX_VALUE大1,因此int y无法保存它。 在这种情况下,它缠绕到负数。

如果你想亲自处理这个案例,你可能会这样做:

 if ( x > (long)Integer.MAX_VALUE ) { // x is too big to convert, throw an exception or something useful } else { y = (int)x; } 

所有这些假设都是正数。 对于负数,请使用MIN_VALUE而不是“MAX_VALUE”

如果使用Guava库 ,则有方法Ints.checkedCast(long)Ints.saturatedCast(long)long转换为int

从Java 8开始,您可以使用:Math.toIntExact(long value)

请参阅JavaDoc:Math.toIntExact

返回long参数的值; 如果值溢出一个int,则抛出一个exception。

Math.toIntExact在JDK 8中的源代码:

 public static int toIntExact(long value) { if ((int)value != value) { throw new ArithmeticException("integer overflow"); } return (int)value; } 
 long x = 3; int y = (int) x; 

但是假设long int可以表示为一个int ,你知道两者之间的区别吗?

您可以使用Long包装器来代替long原语,并调用Long.intValue() http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html#intValue ()

它舍入/截断长整型值,以适应int。

在Java中,long是一个有符号的64位数字,这意味着您可以存储-9,223,372,036,854,775,808和9,223,372,036,854,775,807(含)之间的数字。

另一方面,int是32位的数字,这意味着你可以存储-2,147,483,648和2,147,483,647(含)之间的数字。

所以如果你的长时间超出了整数的允许值,你将不会得到有价值的转换。

有关原始Javatypes的大小的详细信息:

http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

如果直接投射显示错误,你可以这样做:

 Long id = 100; int int_id = (int) (id % 100000); 
 Long l = 100; int i = Math.round(l); 

在Java中,有一个严格的方法来将长整型转换为整型

不仅可以将lnog转换为int,任何types的extends数字都可以转换为其他Numbertypes,这里我将向您展示如何将long转换为int,反之亦然。

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

将long转换为int