次のコードの実行順序は?Javaのi ++の実行順序は何ですか
私の理解でif (hash[s.charAt(right++)]-- >= 1)
1. hash[s.charAt(right)] >= 1
2. hash[s.charAt(right)]--
3. right++;
ありがとう!!!!
次のコードの実行順序は?Javaのi ++の実行順序は何ですか
私の理解でif (hash[s.charAt(right++)]-- >= 1)
1. hash[s.charAt(right)] >= 1
2. hash[s.charAt(right)]--
3. right++;
ありがとう!!!!
if (hash[s.charAt(right++)]-- >= 1)
のシーケンスを実行は、次のとおりright
のright
(C)
s
(B)hash
(A)b.charAt(c)
(d)a[d]
のUE(E)a[d]
e < f
場合、一定1
(F)if
ブロックを読みます。 hash
、s
、およびright
は3つのローカル変数である場合は、if
文のバイトコードは次のとおりです。
1: aload_1
2: aload_2
3: iload_3
4: iinc 3, 1
5: invokevirtual #21 // Method java/lang/String.charAt:(I)C
6: dup2
iaload
7: dup_x2
iconst_1
isub
iastore
8: iconst_1
9: if_icmplt 99
UPDATE
効果が同じですあなたが書いたように:
boolean cond = hash[s.charAt(right)];
hash[s.charAt(right)]--;
right++;
if (cond) {
値は一度だけ読み込まれ、charAt()
コールとインデックスルックアップは一度だけ発生します。
ありがとう! 'right ++ 'に等しいコードの上にあります。 if(hash [s.charAt(right)]> = 1); ハッシュ[s.charAt(右)] ++; '? – user8355591
No. charAt()へのパラメータ値は、インクリメントの前の 'right' *の値です(ステップ2,3、および5)。ステップ4の増分は、「右」の値が取り出された後に起こる。 – Andreas
このように? 'if(hash [s.charAt(right)]> = 1){ ハッシュ[s.charAt(right)] - ; right ++; } ' – user8355591
Eclipseを開いてそのスニペットを貼り付け、コードを実行して結果/あなたの心を共有してください... –