将长整型转换为整数
Integer i = theLong != null ? theLong.intValue() : null;
,或者如果你不需要担心空:
// auto-unboxing does not go from Long to int directly, so
Integer i = (int) (long) theLong;
而在这两种情况下,你可能会遇到溢出(因为龙可以存储更广泛的比整数)。
这是最好的答案,因为它处理NULL值。 – 2014-04-06 01:05:43
@ViacheslavDobromyslov问题是关于Long值,而不是空值。而且我个人认为先拒绝null,而不是在null中使用null,从而在我的应用程序中传输null。所以有人可能会认为这是最糟糕的答案:-) – 2015-06-11 15:46:08
为什么当你只需调用'intValue'而不是两次?此外,它将取消长框,转换为int,并将rebox重新设置为“Integer”,这看起来不是很有用。我没有看到我头顶上的重点,你有这个好理由吗? – Dici 2016-07-14 00:09:03
Integer intValue = myLong.intValue();
看起来比(int) (很长)imo。 – 2013-12-10 20:41:32
它不适用于NULL值 – 2014-03-08 08:35:20
@ViacheslavDobromyslov是的,你是对的。这很明显 – birdy 2014-04-04 08:56:16
这里有三种方法可以做到这一点:
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]
小问题:您应该使用大写后缀'123L'来提高可读性。 – Joey 2012-07-12 12:48:49
或者你可以使用一个很好的字体......然后我们再次去......:D(只是j/k,我也是这么做的) – davidcesarino 2013-03-31 22:22:22
它不适用于NULL值 – 2014-03-08 08:35:02
在java中,有转换很长的一个严格的方法to int
不仅lnog可以转换为int,任何类型的类都可以扩展Number可以转换为其他Numbe一般来说,在这里我会告诉你如何将long转换为int,反之亦然。
Long l = 1234567L;
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);
如果你关心检查溢出,并有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;
}
最好简单的做法是:
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;
}
假设不为空longVal
Integer intVal = ((Number)longVal).intValue();
y您得到一个对象,可以是整数或长时间工作的例子。我知道这是丑陋的,但它发生......
如果您使用的是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);
}
}
长参观者= 1000;
int convVisitors =(int)visitor;
首先您需要检查您的Long是否不超过Integer MaxValue。 – Lukasz 2011-04-27 12:26:41
Java 8:http://*.com/a/36331461/2291056 – Kuchi 2016-03-31 11:00:49