頭脳でいっぱいの黒い疑問符はありますか?もしそうなら、注意の波をクリックしてください:)
最初は馬鹿げた顔もしていたのですが、知識が蓄積されるにつれ、新しい考えが浮かび、参考のために記録しました。
実行効率に関しては、i + = 1の方が優れています
まず、コードの一部を見てみましょう
public class PlusEqualTest {
void m1() {
int i = 0;
i+=1;
}
void m2() {
int i = 0;
i=i+1;
}
}
実行効率はJVMの観点に基づいているため、javap -verbose xxx.classを使用して、バイトコードファイルを命令の形式に変換します。これは理解しやすいものです。
ここでは、m1m2の手順の一部のみを示しています
void m1();
0: iconst_0
1: istore_1
2: iinc 1, 1
5: return
void m2();
0: iconst_0
1: istore_1
2: iload_1
3: iconst_1
4: iadd
5: istore_1
6: return
明らかに、i + = 1の実行ステップが少ないことがわかります。m1m2の指示の意味を説明してください
m1:
- 定数0を操作スタックにプッシュします
- ローカル変数テーブルの最初のグリッドにデータを保存します
- ローカル変数テーブルの最初のグリッドに1を追加し、保存します
m2:
- 定数を操作スタックにプッシュします
- スタックの一番上の要素をポップして、ローカル変数テーブルの最初のグリッドに保存します
- ローカル変数テーブルの最初のグリッドを操作スタックにプッシュします
- 定数1を操作スタックにプッシュします
- 操作スタックの最初の2つの要素をポップすると、CPUが加算操作を実行します
- 結果をローカル変数の最初のグリッドに保存します
Java構文の観点から
i = i + 1は、操作中に自動型変換を実行してから割り当てを実行します。右側の型が左側の型よりも大きい場合、コンパイル中にエラーが報告されます。
i + = 1は上記の操作を回避しますが、メモリオーバーフローを引き起こす可能性があります(たとえば、i = 127)
コーディングの観点から
i = i +1は一目でより明確になります
要約すると、i + = 1の実行効率は高くなりますが、jvmは十分に強力なので、この最適化は気にしないので、i = i +1を使用することをお勧めします。