我有一个接受short
类型参数的方法。
public void doSomething(short value) {
//DO STUFF
}
我可以这样称呼它:
short value = 3;
doSomething(value);
但不是另一个:
doSomething(3);
为什么呢?有没有办法表明这个参数是short
而不是int
?
答案 0 :(得分:5)
您可以这样称呼它:
doSomething((short)3);
如果没有强制转换,3
将永远是一个int literal。
答案 1 :(得分:2)
原因
public void doSomething(short value) {
//DO STUFF
}
可以称为
short value = 3;
doSomething(value);
原因值已为short
当你像doSomething(3);
那样调用它时,3被认为是整数,不能隐式地变为短暂。
基本上doSomething(3);
需要
public void doSomething(int value) {
//DO STUFF
}
方法。
但是你可以将3转换为short并且可以将方法调用为:
doSomething((short)3);
答案 2 :(得分:2)
在Java中,默认情况下,赋值右侧的算术表达式的计算结果为int
。看看这个令人惊讶的例子:
short a = 1;
short b = 2;
short c = a + b; // Error!
您需要明确地转换为short
,如其他答案中已提到的那样,或者更改方法的签名以接受int
。
值得一提的是,就空间而言,short
占用与int
相同的空间,如果它们是局部变量,类变量甚至实例变量,因为在大多数系统中,变量地址是对齐,我只是改变方法的签名来接受int
,而不会使事情复杂化。