Java Short补充问题

时间:2012-02-02 02:11:31

标签: java

这可能已在另一篇文章中得到解答,但我不知道为什么在我的测试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>

2 个答案:

答案 0 :(得分:8)

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

修改

背后的“原因”是operator precedence1 + 2 * 37而非9的原因相同。是的,基元和文字被视为相同。

您无法Short s = 1; s += 1;,因为它与a = a + 1;相同,其中a转换为intint无法转换为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);
    }
}