[英]Casting a long to an Int returns in '-1'?
在 Java 中将 long 转换为 int 是否安全?
出于某种原因,下面的代码中,我得到'-1' 作为 anIntVar。 我已经检查过'aLongVar'不是-1。
public static final long CONST = 1000 * 62;
long aLongVar
int anIntVar = (int)(aLongVar/ CONST);
如果它是安全的,则不需要显式强制转换。
不,它不安全。 不要这样做。 因为,A Long / long
有64 位,并且可以保存比Integer / int
只有32 位更多的数据。 进行转换将导致信息丢失。
如果您想这样做,请这样做
使用.intValue()
将Long
值转换为int
值。
long
是 64 位, int
是 32 位,所以不,它不安全。
尝试
int anIntVar = Math.rint(aLongVar);
如果 long 中的值适合 int,您可以将 long 转换为 int 并获得有意义的结果。 如果没有,您将被截断高位。 在您的示例中,您没有在进行除法之前显示分子中的内容,但是在正确的输入下,-1 肯定不是不可能的值。
合法吗? 是的。 安全吗? 不,除非您进行范围检查,或者确信您对输入足够了解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.