除了可读性之外,如果我在java中使用+ =运算符,如x + = y而不是x = x + y,是否有任何值add

时间:2012-05-18 05:28:01

标签: java operators

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

3 个答案:

答案 0 :(得分:10)

它可以防止+操作的LHS被评估两次。

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

等同于

var.getSomething().x += y;

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

答案 1 :(得分:4)

x+=yx=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都会阻止参数被评估两次(当有副作用时很重要)。