简单的短添加会产生警告

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 变量。 (你需要演员...)