Java Short补充问题

Zac*_*ber 10 java

这可能已经在另一篇文章中得到了解答,但我只是不知道为什么某些东西无法在我的测试Java应用程序(1.7.0_01)中编译.

这编译:

Short a = (short)17;
a = (short)2 + 1;
Run Code Online (Sandbox Code Playgroud)

我知道"a + a"会产生一个整数.编译好:

Short a = (short)17;
int shortTest = a + a;
Run Code Online (Sandbox Code Playgroud)

那为什么不编译呢?

Short a = (short)17;
a = (short)a + a;
Run Code Online (Sandbox Code Playgroud)

另外,我是否正确地假设你不能在短裤上使用+ =, - =等...因为转换为整数?如果可以进行这些操作,有人可以提供一个例子吗?

编辑1
有一些投票要关闭这篇文章,因为它被认为是一个复制的原始类型'短' - 在Java中投射.但是,我的例子围绕着Wrapper"Short"对象.关于构建Wrapper对象有一些重要且更复杂的规则,这就是我认为需要关注的内容.

另外,正如我的原帖所示,我正在寻找第三个代码块背后的"为什么".我也有兴趣知道是否可以在Short Wrapper上使用"+ ="," - ="等等.

Dmi*_*tri 10

似乎正确的答案因某种原因被删除了:(short) a + a相当于((short) a) + a,你正在寻找(short)(a + a).

编辑

其背后的"原因"是运营商优先权,原因与否1 + 2 * 3也是7如此9.是的,基元和文字被视为相同.

你不能这样做,Short s = 1; s += 1;因为它与a = a + 1;a转换为a 的位置相同,int并且int不能转换为a Short.你可以像这样修复长版本:a = (short) (a + 1);但是没有办法在那里得到显式的强制转换+=.

这很烦人.