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