我发现了一些关于short
算术的问题,但没有一个比较以下三个案例。我想知道为什么这两段代码都没问题
(a)中
short m = 1;
m += m;
(b)中
short m = 1;
m += m + m;
虽然这个
(c)中
short m = 1;
m = m + m;
导致错误“类型不匹配:无法从int转换为短”?
答案 0 :(得分:4)
这不是警告 - 这是一个错误。
这里有两个事实:
short + short
运营商; “最小”添加为int + int
,结果类型为int
,如有必要,操作数会自动提升为int
(请参阅JLS 15.18.2)第二点是前两个操作的原因。你有效地得到了:
m = (short) (m + m);
和
m = (short) (m + m + m);
第一点是上次操作无效的原因 - m + m
的类型为int
,您无法为int
分配short
值变量。 (你需要演员......)