回答

收藏

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

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

直到今天,我觉得比如:
5 C+ l+ B8 `" ci  = j;只是一条捷径:
  Z5 q8 a0 [, C: Ni = i   j;但如果我们试试这个:) d7 r% X! V  c) @! n
int i = 5;long j = 8;然后i = i   j;但是i  = j;编译得很好。
% t' o. f( j  F* H  {: |这是否意味着实际i  = j;就是这样的捷径i = (type of i) (i   j)?
2 r9 K+ K- o7 p, _5 P- Z; S                                                                6 m9 k: P$ n4 t, y; j
    解决方案:                                                               
. Q5 |; _7 _% N: e. f                                                                和这些问题一样,JLS 给出答案。在这种情况下,§15.26.二 复合赋值运算符。提取物:( _. ^. A" Z0 i! m$ I* ?7 {
复合赋值表达式E1 op= E2等价于E1 = (T)((E1) op (E2)),其中T是 的类型E1,除了E只计算一次。
9 f+ O% D9 B# Z9 R/ b5 e# [3 m引用自§15.26.2的示例
( N/ T, D& x. [[…] 以下代码正确:
- i. h( I8 v" z2 v# K( hshort x = 3;x  = 4.6;并导致 x 的值为 7,因为它等于:
3 F& w# m2 p9 o; m* P9 q$ Tshort x = 3;x = (short)(x   4.6);换句话说,你的假设是正确的。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则