2016-10-28 33 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_,没有例外,从左到右进行评估。 –

相关问题