2016-10-28 2 views
0

Ich verstehe, dass, wenn ich die folgende ZuordnungWas ist die Logik hinter arr1 [i ++] = arr2 [j ++]?

arr[i++] = 1 zu

arr[i] = 1; 
i++; 

entspricht aber tut

arr1[i++] = arr2[j++]

äquivalent zu

arr1[i] = arr2[j]; 
i++; 
j++; 
haben

Was

int i = 0; 
while(i++ < 5){ 
    // do something... 
} 

Hat die Maschine ausführen die //do something zuerst, dann 1 erhöhen und dann beurteilen, ob ich zur Zeit ist < 5?

Kann mir bitte jemand helfen, das zu verstehen?

+4

Ja, sie sind gleichwertig. Nicht sicher, was du fragst. – nhouser9

+1

Sie könnten es einfach testen und selbst sehen. Wie auch immer, Ihre Befragung ist ein klares Zeichen dafür, dass ein solcher Code schwer zu verstehen ist und daher um jeden Preis vermieden werden sollte. Wenn Sie so viele Anweisungen wie möglich in eine einzige Codezeile eingeben, wird der Code nur schwer lesbar und zu warten. –

+0

'i ++' wird sofort erhöht und gibt den vorherigen Wert zurück. – 4castle

Antwort

4

Eigentlich ist arr[i++] = 1 entspricht

int i1 = i; 
i = i + 1; 
arr[i1] = 1; 

Der Unterschied in einem Ausdruck relevant wird wie

arr[i++] = i; 

wo i wurde durch die Zeit, sein Wert wird geschrieben, um das Array inkrementiert worden. Ich hoffe, das ist genug Informationen, um Ihre Frage zu lösen.

+0

Der beste Ort zum Erinnern ist dies: https://docs.oracle.com /javase/specs/jls/se8/html/jls-15.html#jls-15.7 Es gibt Ihnen eine einfache Faustregel: Ausdruck sind _always_, ohne Ausnahmen, von links nach rechts ausgewertet. –

Verwandte Themen