问题描述
|
在Java中将long转换为int是否安全?
由于某种原因,以下代码将anIntvar设为\'-1 \'。并且我检查了\'aLongVar \'不是-1。
public static final long CONST = 1000 * 62;
long aLongVar
int anIntvar = (int)(aLongVar/ CONST);
解决方法
不,它不安全。不要做。因为,
Long / long
具有64位,并且可以容纳的数据比Integer / int
仅具有32位的要多。进行转换将导致信息丢失。
如果您完全想要这样做,请这样做
使用.intValue()
将Long
值转换为int
值。
, 如果安全的话,则不需要显式转换。
, long
是64位,an5ѭ是32位,所以不,这是不安全的。
, 尝试
int anIntVar = Math.rint(aLongVar);
, 如果long中的值适合int,则可以将long转换为int并获得有意义的结果。如果没有,您将被截断高位。在您的示例中,您没有在进行除法运算之前显示分子中的值,但是-1给出正确的输入当然不是不可能的值。
合法吗是。安全吗?不,除非您进行范围检查或确信您对输入足够了解,否则不会。