为什么 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);换句话说,你的假设是正确的。 |
|
|
|
|
|