2011-02-24 51 views
3

無論何時我使用字節或短數據類型作爲方法參數,在方法調用時,我都需要明確地轉換傳遞給這些方法的值。函數調用所需的類型轉換以short數據類型變量作爲參數

爲了更好地解釋:

void foo(short x) 
{} 
void main() {foo((short)32);} 

如果我不使用短這裏則生成的警告。

method foo in class px cannot be applied to given types 
required: byte 
found: int 

我怎樣才能讓它變得更好?

+0

這是一個重複的http://stackoverflow.com/questions/477750/primitive-type-short-casting-in-java – 2011-02-24 15:41:37

回答

3

整數常量隱含有類型int,並從int轉換爲byteshort潛在丟失信息,因此它需要顯式轉換。

所以不要使用byteshort除非你真的需要,這是非常罕見的情況。

+0

我使用短&字節,以便我可以有效地管理空間......但是我在某處知道,明確的演員有其自身的低效率問題。 – 2011-02-24 17:53:01

+1

@Marcos:這兩個帳戶都是錯誤的(即使它是正確的,也會出現過早的優化)。無論如何,CPU只能使用int或long,因此使用short或byte實際上可能*效率較低。鑄造根本不是問題。只有*使用字節或短的情況纔有意義,在大數組中。 – 2011-02-24 21:00:50

4

沒有出路。

Java沒有辦法編碼byteshort文字。任何數字字面值都是int值,並且在不投射的情況下將int轉換爲short將始終創建警告。

+0

所以我應該靜靜地忽略這些警告,或者我應該執行顯式投射,但是因爲我在某處學到的投射很昂貴 – 2011-02-24 17:53:53

+0

@Marcos:你不能忽略它,因爲它不是一個警告,它是一個編譯器錯誤。 – 2011-02-24 21:02:51