Java 简短的加法问题

2022-09-04 21:42:55

这可能已经在另一篇文章中得到了回答,但我只是不明白为什么某些东西不会在我的测试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
有一些投票关闭了这篇文章,因为有人建议它是原始类型“短”的副本 - 在Java中铸造。但是,我的示例围绕包装器“Short”对象展开。关于转换 Wrapper 对象有重要且更复杂的规则,我认为这是需要关注的。

另外,正如我的原始帖子所示,我正在寻找第3个代码块背后的“为什么”。我也想知道是否可以使用“+=”,“-=”等...在短包装器上。


答案 1

似乎由于某种原因删除了正确答案:等效于,您要查找。(short) a + a((short) a) + a(short)(a + a)

编辑

它背后的“为什么”是运算符优先级,同样的原因是 为什么 是 而不是 。是的,基元和文字被同等对待。1 + 2 * 379

您不能这样做,因为它与将 a 转换为 an 且不能强制转换为 .您可以像这样修复长版本:,但是没有办法使用 .Short s = 1; s += 1;a = a + 1;intintShorta = (short) (a + 1);+=

这很烦人。


答案 2

推荐