2

+=var1=var1+var2の両方がJavaで同じことを行うことを理解しています。私の質問は、読みやすさとは別に、前者がもたらす他の利点(ある場合)は何ですか? なぜJava開発者がこれを導入したのか興味があったので、私は尋ねています.付加価値のためにそうするべきでした.

4

3 に答える 3

10

操作のLHSが+2回評価されるのを防ぎます。

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

これは同等ではありません

var.getSomething().x += y;

ただし、読みやすさの向上とタイピングの労力の削減による付加価値は過小評価されるべきではありません。

于 2012-05-18T05:32:07.067 に答える
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
于 2012-05-18T05:35:44.377 に答える
0

IMHOこれらの演算子(+ =、-=、* =、/ =)はCから継承されます。昔(高度に最適化されたコンパイラが使用される前)は、多くのアーキテクチャでこれらの演算子が直接単一に変換されるため、パフォーマンスが向上する可能性がありました。アセンブラ命令。現在、すべてのコンパイラは自動的に同じコードを生成する必要があります。Javaに関しては、RHSに副作用がなくても、クライアントVMが同じバイトコードを生成するかどうかはわかりません。ただし、パフォーマンスに違いはありません。

そしてディートリッヒは正しいです、+ =などはすべて議論が2回評価されるのを防ぎます(副作用がある場合に重要です)。

于 2012-05-18T05:37:09.647 に答える