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.
long visitors =1000;
int convVisitors =(int)visitors;
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;
}
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
.
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
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...
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;
}
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);
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);
}
}
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]
try this:
Int i = Long.valueOf(L)// L: Long Value
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);
For non-null values:
Integer intValue = myLong.intValue();
Source: Stackoverflow.com