Convert Long into Integer
JavaJava Problem Overview
Java Solutions
Solution 1 - Java
Integer i = theLong != null ? theLong.intValue() : null;
or if you don't need to worry about null:
// auto-unboxing does not go from Long to int directly, so
Integer i = (int) (long) theLong;
And in both situations, you might run into overflows (because a Long can store a wider range than an Integer).
Java 8 has a helper method that checks for overflow (you get an exception in that case):
Integer i = theLong == null ? null : Math.toIntExact(theLong);
Solution 2 - Java
Here are three ways to do it:
Long l = 123L;
Integer correctButComplicated = Integer.valueOf(l.intValue());
Integer withBoxing = l.intValue();
Integer terrible = (int) (long) l;
All three versions generate almost identical byte code:
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]
Solution 3 - Java
For non-null values:
Integer intValue = myLong.intValue();
Solution 4 - Java
If you care to check for overflows and have Guava handy, there is Ints.checkedCast()
:
int theInt = Ints.checkedCast(theLong);
The implementation is dead simple, and throws IllegalArgumentException on overflow:
public static int checkedCast(long value) {
int result = (int) value;
checkArgument(result == value, "Out of range: %s", value);
return result;
}
Solution 5 - Java
If you are using Java 8 Do it as below
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);
}
}
Solution 6 - Java
In Java 8 you can use Math.toIntExact
. If you want to handle null
values, use:
Integer intVal = longVal == null ? null : Math.toIntExact(longVal);
Good thing about this method is that it throws an ArithmeticException
if the argument (long
) overflows an int
.
Solution 7 - Java
You'll need to type cast it.
long i = 100L;
int k = (int) i;
Bear in mind that a long has a bigger range than an int so you might lose data.
If you are talking about the boxed types, then read the documentation.
Solution 8 - Java
The best simple way of doing so is:
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;
}
Solution 9 - Java
Assuming not null longVal
Integer intVal = ((Number)longVal).intValue();
It works for example y you get an Object that can be an Integer or a Long. I know that is ugly, but it happens...
Solution 10 - Java
Using toIntExact(long value) returns the value of the long argument, throwing an exception if the value overflows an int. it will work only API level 24 or above.
int id = Math.toIntExact(longId);
Solution 11 - Java
long visitors =1000;
int convVisitors =(int)visitors;
Solution 12 - Java
try this:
Int i = Long.valueOf(L)// L: Long Value
Solution 13 - Java
In addition to @Thilo's accepted answer, Math.toIntExact
works also great in Optional method chaining, despite it accepts only an int
as an argument
Long coolLong = null;
Integer coolInt = Optional.ofNullable(coolLong).map(Math::toIntExact).orElse(0); //yields 0
Solution 14 - Java
In java ,there is a rigorous way to convert a long to int
not only lnog can convert into int,any type of class extends Number can convert to other Number type in general,here I will show you how to convert a long to int,other type vice versa.
Long l = 1234567L;
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);