short x, y;
short z = ((short)x) + ((short)y);
所以我理解在Java中,一个值在被添加时被认为是一个整数。这只是语言中的一个细微差别。但是,在这里,我已经将short
投射到变量x
和y
,它仍然会给我一个错误说
无法从int转换为short
答案 0 :(得分:6)
所以我理解在java中,当一个值被添加时它被认为是一个整数。
不一定。例如,如果您要添加long
,则不会。
但是,在这里,我已经对变量x和y进行了简短的说明,它仍然给出了一个错误,说不能从int转换为short。
那是因为你在加价之前就投出了价值; +
的结果仍为int
。 (事实上,(short)x
是禁止操作; x
已经 a short
。)
正确的写作方式是:
short z = (short)(x + y);
short
被提升为int
s,加在一起,然后我们将结果转发回short
。
重新评论:
(我不知道为什么首先将x和y缩短并将它们放入括号中不会导致短+短添加
因为Java 没有添加 short + short
。添加的最小尺寸为int
,因为the first thing“添加”运算符(+
和-
)的作用是binary numeric promotion:
如果任何操作数属于引用类型,则进行拆箱转换(第5.1.8节)。
- 醇>
应用扩展基元转换(第5.1.2节)来转换由以下规则指定的一个或两个操作数:
如果任一操作数的类型为
double
,则另一个操作数将转换为double
。否则,如果任一操作数的类型为float
, the other is converted to
float`。否则,如果任一操作数的类型为
long
,则另一个操作数将转换为long
。否则,两个操作数都将转换为
int
类型。
所以short + short
(或char + char
或byte + byte
)变为int + int
,产生int
。 Java的仅整数加法为int + int => int
和long + long => long
。