在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