• 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友,商务沟通v:ai_draw
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

i ++ vs i —

Java admin 6年前 (2018-03-29) 2101次浏览 已收录 0个评论 扫描二维码

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
喜欢 (0)
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址