为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Java的+=,-=,*=,/=复合赋值操作符不需要转换?

为什么Java的+=,-=,*=,/=复合赋值操作符不需要转换?

达令说 2019-05-30 10:21:42
为什么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个赞

和往常一样,JLS掌握着答案。在这种情况下§15.26.2复合赋值算子。摘录:

形式的复合赋值表达式E1 op= E2等于E1 = (T)((E1) op (E2)),在哪里T的类型E1,除了E1只计算一次。

引用的一个例子第15.26.2节

[.]以下代码是正确的:

short x = 3;x += 4.6;

并导致x的值为7,因为它相当于:

short x = 3;x = (short)(x + 4.6);

换句话说,你的假设是正确的。


查看完整回答
反对 回复 2019-05-30
?
慕哥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'


查看完整回答
反对 回复 2019-05-30
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

很好的问题。这个Java语言规范证实了你的建议。

例如,以下代码是正确的:

short x = 3;x += 4.6;

并导致x的值为7,因为它相当于:

short x = 3;x = (short)(x + 4.6);


查看完整回答
反对 回复 2019-05-30
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

是,

基本上当我们写

i += l;

编译器将此转换为

i = (int)(i + l);

我刚查过.class文件代码。

很高兴知道


查看完整回答
反对 回复 2019-05-30
  • 4 回答
  • 0 关注
  • 628 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信