2011-06-13 47 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給出正確的輸入肯定不是不可能的值。

合法嗎?是。它安全嗎?不,除非你進行範圍檢查,或者確信你已經足夠了解你的投入。