回答

收藏

为什么 Java 的 +=、-=、*=、/= 复合赋值运算符不需要强制转换?

技术问答 技术问答 474 人阅读 | 0 人回复 | 2023-09-11

直到今天,我觉得比如:
9 R' I& `! [5 L8 Zi  = j;只是一条捷径:
) K& \6 p( u! o, `8 O6 P2 t7 p2 |i = i   j;但如果我们试试这个:2 ]0 f4 r" t) A1 d0 G2 w: Y1 @
int i = 5;long j = 8;然后i = i   j;但是i  = j;编译得很好。& l, J4 w. J# F  ~! L" i
这是否意味着实际i  = j;就是这样的捷径i = (type of i) (i   j)?
2 {! @3 y5 Q, A: U0 z) e                                                                $ h, a! x* y! [7 s7 _5 S( A7 `9 {
    解决方案:                                                               
/ v! S8 f9 Z, S9 e: U                                                                和这些问题一样,JLS 给出答案。在这种情况下,§15.26.二 复合赋值运算符。提取物:
1 b- c' B1 z8 \6 e% W% T复合赋值表达式E1 op= E2等价于E1 = (T)((E1) op (E2)),其中T是 的类型E1,除了E只计算一次。
7 `. |$ R4 L. h' ?2 F1 b引用自§15.26.2的示例
+ Z2 J# a; _" d; |$ X9 X. |[…] 以下代码正确:
% T7 k3 ?# \; a) dshort x = 3;x  = 4.6;并导致 x 的值为 7,因为它等于:2 F4 g+ {; t8 P: ~- _9 O
short x = 3;x = (short)(x   4.6);换句话说,你的假设是正确的。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则