A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余睿 中级黑马   /  2012-11-6 10:56  /  1653 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余睿 于 2012-11-6 11:06 编辑

    在网上看到的,感觉有些收获,跟大家分享一下。
    在代码书中或课堂上我们都知道++i和i++在作为一个单独语句使用时没有区别,即相当于i=i+1; 而作为语句的一部分时,如a=++i; 和a=i++; ++i先执行加1操作,再执行赋值操作(因++在前),而i++是先执行赋值操作,再执行加1操作(因++在后)。但这种论述未将其中更深的运行机制讲出来,尤其是在if或while等判断语句中,下面对其进行探讨:

作为单独语句存在,如下面的两段代码:
int i=0;

if(i++){...}














int i=0;

if(++i){...}




          上面的条件判断代码虽然是以单独语句出现,但编译器将等价于i++(或++i)>0,故在第一段代码中先执行i>0判定,再执行i++,因此条件体里的代码不被执行;而在第二段代码中先执行i=i+1,再执行i>0,因此条件里代码会被执行。


作为语句的一部分存在,如下面的一段代码:
int i=4,j=3;

if((i=j++)!=4){...}


    上面的代码中括号()的优先级比!=的优先级高,但编译器仍然将++运算符最后执行。即先执行赋值语句i=j,然后判定(i=3)!=4成立,最后执行j++,接下去执行条件体里代码。

        综上可知当i++作为单独条件语句进行判定时,即使没有显示地声明与0的比较,编译器仍将加上与0的比较;当i++作为复合语句使用时,不管++是否在优先级更高的运算符中,++仍然最后才执行,即在当前所在语句操作执行之后。



评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
呃 有些问题
编译器与0相比较 这和++运算符无关,写个if(i)一样会比较,因为这是控制表达式
我想删了这个 怎么才能删啊
回复 使用道具 举报
这个对于初学者,很容易混的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马