在Java中将int转换为int是否安全?将一个long投射到一个Int返回'-1'?
出于某种原因,下面的代码,我得到'-1'作为IntVar。我检查过'aLongVar'不是-1。
public static final long CONST = 1000 * 62;
long aLongVar
int anIntVar = (int)(aLongVar/ CONST);
在Java中将int转换为int是否安全?将一个long投射到一个Int返回'-1'?
出于某种原因,下面的代码,我得到'-1'作为IntVar。我检查过'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位,所以没有,这不是安全的。
“不安全”是什么意思?最后几位数字会丢失的事实? – LouwHopley 2011-06-13 18:16:53
@Nideo:我的意思是说,一般来说这样做不好,因为你说了什么,或者是因为如果'long'包含的值大于'int'的最大值,演员后可能会有垃圾。 – John 2011-06-13 18:19:52
如果它是安全的,它不需要明确的转换。
尝试
int anIntVar = Math.rint(aLongVar);
如果long中的值适合int,则可以将long强制转换为int并获得有意义的结果。如果没有,你会得到高位截断。在你的例子中,在分割之前你并没有显示分子中的内容,但-1给出正确的输入肯定不是不可能的值。
合法吗?是。它安全吗?不,除非你进行范围检查,或者确信你已经足够了解你的投入。
你的意思是,除了长期持有更多的信息,在转换为int时会丢失吗? – JohnFx 2011-06-13 18:13:01
可能的重复 - http://stackoverflow.com/questions/1590831/safely-casting-long-to-int-in-java – mre 2011-06-13 18:13:13
这段代码甚至没有编译。 – jzd 2011-06-13 18:13:27