2

我确实理解+=var1=var1+var2在 Java 中都做同样的事情。我的问题是,除了更好的可读性之外,前者还带来了哪些其他好处(如果有的话)?我之所以问是因为我很好奇为什么 java 开发人员会引入这个,他们应该这样做是因为一些附加值。

4

3 回答 3

10

它可以防止对+操作的 LHS 进行两次评估。

var.getSomething().x = var.getSomething().x + y;

等于

var.getSomething().x += y;

然而,提高可读性和减少打字工作量所带来的附加价值不容小觑。

于 2012-05-18T05:32:07.067 回答
4

x+=y并且x=x+y不一样。

x+=y相当于x=(Type of x)(x+y)

byte x=4;
byte y=3;
x+=y; // x =(byte)(x+y)
x = x + y; // compile time error
于 2012-05-18T05:35:44.377 回答
0

恕我直言,这些运算符(+=、-=、*=、/=)继承自 C。在过去(在我们拥有高度优化的编译器之前),它们可以提高性能,因为在许多架构上,这些运算符直接转换为单个汇编指令。如今,所有编译器都应该自动生成相同的代码。至于Java,即使对RHS没有副作用,我也不知道客户端VM是否会产生相同的字节码。不过应该不会影响性能。

迪特里希是对的,+= 等都阻止了对参数进行两次评估(当有副作用时很重要)。

于 2012-05-18T05:37:09.647 回答