为什么Java的+=,-=,*=,/=复合赋值操作符不需要转换?直到今天,我还在想,例如:i += j;只是以下几个方面的捷径:i = i + j;但如果我们尝试这个:int i = 5;long j = 8;然后i = i + j;不会编译但是i += j;会编译得很好。这是否意味着i += j;是这样的捷径i = (type of i) (i + j)?
4 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
形式的复合赋值表达式 E1 op= E2
等于 E1 = (T)((E1) op (E2))
,在哪里 T
的类型 E1
,除了 E1
只计算一次。
[.]以下代码是正确的: short x = 3;x += 4.6;
并导致x的值为7,因为它相当于: short x = 3;x = (short)(x + 4.6);
慕哥9229398
TA贡献1877条经验 获得超6个赞
byte b = 10;b *= 5.7;System.out.println(b); // prints 57
byte b = 100;b /= 2.5;System.out.println(b); // prints 40
char ch = '0';ch *= 1.1;System.out.println(ch); // prints '4'
char ch = 'A';ch *= 1.5;System.out.println(ch); // prints 'a'
添加回答
举报
0/150
提交
取消