2017-02-24 5 views
0

Ich bin ziemlich verwirrt, wenn es einen Unterschied zwischen den beiden unten gibt. Ich denke, sie machen das Gleiche, aber wenn ich es kompiliere, scheint es, als wären sie anders. Vielen Dank im Voraus.Kurzfristig für inkrementieren in Java

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

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

Die erste wird nicht inkrementiert, wenn 'hash [s.charAt (leftIdx)]' kleiner als 0 ist. – shmosel

+1

Um @ shmosels Kommentar auf eine andere Art zu setzen, wird die zweite immer erhöht. – tavnab

Antwort

2

Refactoring die Postfix-Operatoren, die erste entfernen entspricht dies:

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

Die zweite (vorausgesetzt, Ihr hash Mitglieder ganze Zahlen sind) entspricht dies:

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

Der Operator postfix ++ gibt den vorinkrementierten Wert zurück und inkrementiert ihn als Nebeneffekt. So verwendet Ihr if im zweiten Beispiel den vorinkrementierten Wert in seinem Zustand (oben dargestellt durch tmp).