2016-10-28 31 views
0

我明白,如果我有以下分配arr1 [i ++] = arr2 [j ++]背後的邏輯是什麼?

arr[i++] = 1 相當於

arr[i] = 1; 
i++; 

但確實

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

相當於

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

什麼

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

有時機器執行//do something第一再增加1,然後評估我是否是當前< 5?

有人能幫我理解嗎?

+4

是的,它們是等效的。不確定你在問什麼。 – nhouser9

+1

你可以測試它並自己看看。但無論如何,您的訊問是一個明確的信號,表明此類代碼難以理解,因此應該不惜一切代價予以避免。在一行代碼中放置儘可能多的指令只會使代碼難以閱讀和維護。 –

+0

'i ++'立即增加,並返回以前的值。 – 4castle

回答

4

實際上,arr[i++] = 1相當於

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

的差異變得相關像

arr[i++] = i; 

i其中已經增加通過其值被寫入到所述陣列的時間的表達式。我希望這是足夠的信息來解決你的問題。

+0

最好記住的地方是:https://docs.oracle.com /javase/specs/jls/se8/html/jls-15.html#jls-15.7它給你一個簡單的經驗法則:表達式是_always_,沒有例外,從左到右進行評估。 –

相關問題