为什么 Java 的 +=、-=、*=、/= 复合赋值运算符不需要强制转换?
技术问答
412 人阅读
|
0 人回复
|
2023-09-11
|
直到今天,我觉得比如:
+ ]3 _6 i n5 z8 z6 P& F6 ^i = j;只是一条捷径:
% {- C! W/ c9 ii = i j;但如果我们试试这个:
2 s2 H4 a: L) lint i = 5;long j = 8;然后i = i j;但是i = j;编译得很好。
) m' X7 R" l& e. Y* S这是否意味着实际i = j;就是这样的捷径i = (type of i) (i j)?) n" t g- B) H: C5 G) `
1 w K7 m$ }. S* M; ~
解决方案: ; g( j0 f' m! B4 [7 {$ d& T6 X
和这些问题一样,JLS 给出答案。在这种情况下,§15.26.二 复合赋值运算符。提取物:
& Z; e; c8 {/ G2 c复合赋值表达式E1 op= E2等价于E1 = (T)((E1) op (E2)),其中T是 的类型E1,除了E只计算一次。
+ g4 t) V7 k9 k; | G4 U% O: m引用自§15.26.2的示例' V3 y- H) f8 @, L9 S% f
[…] 以下代码正确:
- g* w7 }6 h O5 c. _short x = 3;x = 4.6;并导致 x 的值为 7,因为它等于:
+ A! O, _; |8 L, C$ S3 Kshort x = 3;x = (short)(x 4.6);换句话说,你的假设是正确的。 |
|
|
|
|
|