“+=”运算符在Java中做什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

请你帮助我理解以下代码的含义:

x += 0.1;
提问于
用户回答回答于

程序设计的“常识” x += y就是一个等效的速记符号x = x + y。只要xy属于同一类型(例如,无一不是int多个),你可以考虑两种说法等价的。

但是,在Java中,一般来说x += y 并不相同x = x + y

如果xy属于不同类型,由于语言的规则,这两个语句的行为有所不同。例如,让我们有x == 0(int)和y == 1.1(double):

    int x = 0;
    x += 1.1;    // just fine; hidden cast, x == 1 after assignment
    x = x + 1.1; // won't compile! 'cannot convert from double to int'

+=执行隐式转换,而+您需要明确地转换第二个操作数,否则会出现编译器错误。

引自Joshua Bloch的Java Puzzlers

(...)复合赋值表达式自动将它们执行的计算结果转换为左侧变量的类型。如果结果的类型与变量的类型相同,则强制转换不起作用。但是,如果结果的类型比变量的类型宽,则复合赋值运算符执行无声缩小基元转换[ JLS 5.1.3 ]。

用户回答回答于

它是分配操作符之一。它取值为x0.1,并将(x + 0.1)的结果存回x

所以:

double x = 1.3;
x += 0.1;    // sets 'x' to 1.4

它的功能与之相同,但比以下短:

double x = 1.3;
x = x + 0.1;

扫码关注云+社区