String 源码的第 985 行,equals 方法中
while (n--!= 0) {
if (v1[i] != v2[i])
return false;
i++;
}
这段代码是用于判断字符串是否相等,但有个奇怪地方是用了 i-- != 0 来做判断,我们通常不是用 i++ 么?为什么用 i-- 呢?而且循环次数相同。
原因在于编译后会多一条指令:
i-- 操作本身会影响 CPSR(当前程序状态寄存器),CPSR 常见的标志有 N(结果为负), Z(结果为 0),C(有进位),O(有溢出)。 i > 0 ,可以直接通过 Z 标志判断出来。
i++ 操作也会影响 CPSR(当前程序状态寄存器),但只影响 O(有溢出)标志,这对于 i < n 的判断没有任何帮助。所以还需要一条额外的比较指令,也就是说每个循环要多执行一条指令。
简单来说,跟 0 比较会少一条指令。所以,循环使用 i-- ,高端大气上档次。
作者:vvsuperman 链接:https://hacpai.com/article/1521890633733
