i=i+1 与 i+=1 区别

頭脳でいっぱいの黒い疑問符はありますか?もしそうなら、注意の波をクリックしてください:)

最初は馬鹿げた顔もしていたのですが、知識が蓄積されるにつれ、新しい考えが浮かび、参考のために記録しました。

 実行効率に関しては、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:

  1. 定数0を操作スタックにプッシュします
  2. ローカル変数テーブルの最初のグリッドにデータを保存します
  3. ローカル変数テーブルの最初のグリッドに1を追加し、保存します

m2:

  1. 定数を操作スタックにプッシュします
  2. スタックの一番上の要素をポップして、ローカル変数テーブルの最初のグリッドに保存します
  3. ローカル変数テーブルの最初のグリッドを操作スタックにプッシュします
  4. 定数1を操作スタックにプッシュします
  5. 操作スタックの最初の2つの要素をポップすると、CPUが加算操作を実行します
  6. 結果をローカル変数の最初のグリッドに保存します

Java構文の観点から

i = i + 1は、操作中に自動型変換を実行してから割り当てを実行します。右側の型が左側の型よりも大きい場合、コンパイル中にエラーが報告されます。

i + = 1は上記の操作を回避しますが、メモリオーバーフローを引き起こす可能性があります(たとえば、i = 127)

コーディングの観点から

i = i +1は一目でより明確になります

要約すると、i + = 1の実行効率は高くなりますが、jvmは十分に強力なので、この最適化は気にしないので、i = i +1を使用することをお勧めします。

 

 

おすすめ

転載: blog.csdn.net/qq_28411869/article/details/88654210
おすすめ