这可能已在另一篇文章中得到解答,但我不知道为什么在我的测试Java应用程序(1.7.0_01)中会编译一些东西。
编译:
Short a = (short)17;
a = (short)2 + 1;
我知道" a + a"将产生一个整数。编译好了:
Short a = (short)17;
int shortTest = a + a;
那为什么不编译?
Short a = (short)17;
a = (short)a + a;
另外,我是否正确地假设你不能在短裤上使用+ =, - =等...因为转换为整数?如果可以进行这些操作,有人可以提供一个例子吗?
编辑1
由于有人认为它与Primitive type 'short' - casting in Java重复,因此有一些投票可以关闭这篇文章。但是,我的例子围绕着Wrapper" Short"宾语。关于构建Wrapper对象有一些重要且更复杂的规则,以及我认为需要关注的内容。
此外,正如我的原始帖子所示,我正在寻找&#34;为什么&#34; 在第3个代码块后面。我也有兴趣知道是否可以在短包装上使用&#34; + =&#34;,&#34; - =&#34;等等。< / p>
答案 0 :(得分:8)
似乎因某种原因删除了正确答案:(short) a + a
相当于((short) a) + a
,您正在寻找(short)(a + a)
。
背后的“原因”是operator precedence,1 + 2 * 3
为7
而非9
的原因相同。是的,基元和文字被视为相同。
您无法Short s = 1; s += 1;
,因为它与a = a + 1;
相同,其中a转换为int
且int
无法转换为Short
1}}。您可以像a = (short) (a + 1);
一样修复长版本,但是无法使用+=
来获取显式转换。
这很烦人。
答案 1 :(得分:-2)
这是一个很好的例子:
public class Example {
public static void main(String[] args) {
Short a = (short) 17;
a = (short) (a + a);
}
}