2017-02-24 9 views
0

以下の2つの違いがあれば私はかなり混乱しています。私は彼らが同じことをやっていると思うが、私がコンパイルするとき、彼らは異なっているように思える。前もって感謝します。後置演算子を削除するJavaでインクリメントするための短期

if(hash[s.charAt(leftIdx)]>=0) { 
    hash[s.charAt(leftIdx)]++;  
    // do other things   
} 

if(hash[s.charAt(leftIdx)]++>=0) { 
    // do other things   
} 
+3

'hash [s.charAt(leftIdx)]'が0より小さい場合、最初の数字は増加しません。 – shmosel

+1

@shmoselのコメントを別の方法で入力すると、2番目のコメントは常に増加します。 – tavnab

答えて

2

リファクタリングは、最初のものはこれと等価である:

if(hash[s.charAt(leftIdx)] >= 0) { 
    hash[s.charAt(leftIdx)] += 1;  
    // do other things 
} 

第二これと同等である(あなたのhashメンバーは整数であると仮定):

int tmp = hash[s.charAt(leftIdx)]; 
hash[s.charAt(leftIdx)] += 1; 
if(tmp >= 0) { 
    // do other things 
} 

接尾辞++演算子は、プリインクリメントされた値を返し、それを副作用としてインクリメントします。したがって、2番目の例のifは、その状態(上記のtmpで表される)でプリインクリメントされた値を使用しています。

関連する問題