2011-06-13 62 views
1

在Java中将int转换为int是否安全?将一个long投射到一个Int返回'-1'?

出于某种原因,下面的代码,我得到'-1'作为IntVar。我检查过'aLongVar'不是-1。

public static final long CONST = 1000 * 62; 

long aLongVar 
int anIntVar = (int)(aLongVar/ CONST); 
+0

你的意思是,除了长期持有更多的信息,在转换为int时会丢失吗? – JohnFx 2011-06-13 18:13:01

+0

可能的重复 - http://stackoverflow.com/questions/1590831/safely-casting-long-to-int-in-java – mre 2011-06-13 18:13:13

+0

这段代码甚至没有编译。 – jzd 2011-06-13 18:13:27

回答

2

不,它不是安全的。不要这样做。因为,A Long/long具有64位并且可以容纳比Integer/int具有仅32位更多的数据。进行转换会导致信息丢失。

如果你想这样做,这样做这样

使用.intValue()Long值转换为int值。

1

long为64位,和一个int为32位,所以没有,这不是安全的。

+0

“不安全”是什么意思?最后几位数字会丢失的事实? – LouwHopley 2011-06-13 18:16:53

+0

@Nideo:我的意思是说,一般来说这样做不好,因为你说了什么,或者是因为如果'long'包含的值大于'int'的最大值,演员后可能会有垃圾。 – John 2011-06-13 18:19:52

2

如果它是安全的,它不需要明确的转换。

0

如果long中的值适合int,则可以将long强制转换为int并获得有意义的结果。如果没有,你会得到高位截断。在你的例子中,在分割之前你并没有显示分子中的内容,但-1给出正确的输入肯定不是不可能的值。

合法吗?是。它安全吗?不,除非你进行范围检查,或者确信你已经足够了解你的投入。