自动类型提升的内容我就不赘述了

只说一下 += 运算符的内容
类似于下面的问题:
short s = 1;
s += 3.5;
在Java规范中对这种复合的赋值运算符有如下说明
对于 E1 op= E2 的运算,等价于
E1 = (T)((E1) op (E2))
op可以理解为操作符,即
s += 3.5 的运算等价于  s = (short)((s + 3.5))

这样大家就应该对这个运算为什么能通过可以理解了吧。
s + 3.5的结果是什么类型,可以用自动类型提升的规则得到
然后又做了强制类型转换,所以编译可以通过

但是建议大家对这样的语法减少使用,这会造成不必要的错误,如:
short s = 32767;
s += 10;
这样的语句在编译期是没有错误的,但运行时会出现负值,与预期结果不一样,检查起来也比较复杂。
仅作面试只用,o(∩_∩)o...