我确实理解 + = 和 var1 = var1 + var2 在Java中都做同样的事情。我的问题是,除了更好的可读性之外,前者带来了哪些其他好处(如果有的话)?我问,因为我很好奇为什么java开发人员介绍了这个,他们应该因为一些增值而做到了。
答案 0 :(得分:10)
它可以防止+
操作的LHS被评估两次。
var.getSomething().x = var.getSomething().x + y;
这 等同于
var.getSomething().x += y;
然而,增加可读性和减少打字工作量的附加价值不容小觑。
答案 1 :(得分: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
答案 2 :(得分:0)
恕我直言这些运算符(+ =, - =,* =,/ =)是从C继承的。在过去(在我们拥有高度优化的编译器之前),它们可以提高性能,因为在许多架构中,这些运算符直接翻译到一个汇编指令。如今,所有编译器都应自动生成相同的代码。至于Java,我不知道客户端VM是否会产生相同的字节码,即使RHS没有副作用。但不应该在性能方面有所作为。
Dietrich是对的,+ = et都会阻止参数被评估两次(当有副作用时很重要)。