黑马程序员技术交流社区

标题: 关于运算符与优先级的疑问 [打印本页]

作者: 鸣人H    时间: 2015-5-24 23:12
标题: 关于运算符与优先级的疑问
int x = 1,y = 1;

        if(x++==2 & ++y==2)       
        {
                x =7;
        }
        System.out.println("x="+x+",y="+y);  
这个代码的值为x=2,为什么不是x=7???
如果按照优先级来算,x的值应该是7!!求大神解答!!
作者: wx_uKgDjEiS    时间: 2015-5-24 23:17
本帖最后由 wx_uKgDjEiS 于 2015-5-24 23:19 编辑

这个和优先级没有关系。
后++的优先级其实是比==高的。
但由于是后加,所以虽然对x进行了加一操作,但这个时候还是用没有加之前的x值进行计算,这种情况是根据++的特性来的。
作者: wwb1105    时间: 2015-5-24 23:25
因为x++是先比较再运算,先比较那么x是1,是不等于2的,即if里面的判断结果为false,那么也就不会执行if里面的内容了,所以结果为x=2
作者: 李志鹏    时间: 2015-5-25 00:20
不参与运算时++在变量前,变量后所算出的结果没有区别,但是在参与运算时,就有区别了,++在变量后,是要先比较在加1,而++在变量前时,那就是先加1再比较
作者: wangkai    时间: 2015-5-25 07:20
x++先参与运算,后自增;++x是先增增,再参与运算。所以x++==2是1==2,返回false,循环结束。
作者: mgyyxhyz    时间: 2015-5-25 08:39
我是来看评论的
作者: 791180016    时间: 2015-5-25 08:50
因为x和y初始值都是1,经过if(x++==2 & y++==2)后都各加1,所以都变成2了。
而(if(x++==2 & y++==2)不成立,是因为x++是先运算再自增,即x++==2,表示先用x和2比较是不是相等,然后x++,说以这里x=1,而1不等于2,然后x+1为2,而++y是先执行自增再运算,所以{x=7}没有执行到。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2