for(i = n; i > 0; i--)
{
…
}
for(i = 0; i < n; i++)
{
…
}
发现同样的循环次数,前者要比后者快。
原因是,i--操作本身会影响CPSR(当前程序状态寄存器),CPSR常见的标志有N(结果为负), Z(结果为0),C(有进位),O(有溢出)。i > 0,可以直接通过Z标志判断出来。
i++操作也会影响CPSR(当前程序状态寄存器),但只影响O(有溢出)标志,这对于i < n的判断没有任何帮助。所以还需要一条额外的比较指令,也就是说每个循环要多执行一条指令。
如果换成
for(i = 0; i > -n; i--)
{
…
}
for(i = -n; i < 0; i++)
{
…
}
那么这时候就是i++比i--效率高了,主要是因为与0比较时可以少一条指令。
不过不知道平台无关的Java是不是一定符合这种规律,因为不同JVM有不同的实现方式。