2011-02-24 49 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