简单的短添加会产生警告
Simple short addition yields warning
我发现了一些关于 short
算术的问题,但其中 none 比较了以下三种情况。不知为什么这两段代码没问题
(一)
short m = 1;
m += m;
(b)
short m = 1;
m += m + m;
而这
(c)
short m = 1;
m = m + m;
导致错误 "Type mismatch: cannot convert from int to short" ?
这不是警告 - 这是错误。
这里有两个事实在起作用:
- 没有
short + short
运算符; "smallest" 加法为 int + int
,结果类型为 int
,必要时操作数自动提升为 int
(参见 JLS 15.18.2)
- 复合赋值运算符始终具有隐式转换(参见 JLS 15.26.2)
第二点是为什么前两个操作有效。您有效地获得了:
m = (short) (m + m);
和
m = (short) (m + m + m);
第一点是为什么最后一个操作不起作用——m + m
的类型是int
,你不能将int
值赋给short
变量。 (你需要演员...)
我发现了一些关于 short
算术的问题,但其中 none 比较了以下三种情况。不知为什么这两段代码没问题
(一)
short m = 1;
m += m;
(b)
short m = 1;
m += m + m;
而这
(c)
short m = 1;
m = m + m;
导致错误 "Type mismatch: cannot convert from int to short" ?
这不是警告 - 这是错误。
这里有两个事实在起作用:
- 没有
short + short
运算符; "smallest" 加法为int + int
,结果类型为int
,必要时操作数自动提升为int
(参见 JLS 15.18.2) - 复合赋值运算符始终具有隐式转换(参见 JLS 15.26.2)
第二点是为什么前两个操作有效。您有效地获得了:
m = (short) (m + m);
和
m = (short) (m + m + m);
第一点是为什么最后一个操作不起作用——m + m
的类型是int
,你不能将int
值赋给short
变量。 (你需要演员...)