黑马程序员技术交流社区

标题: 这个题为什么会是这样的答案,求解释 [打印本页]

作者: cishengbuhuan    时间: 2015-3-8 14:44
标题: 这个题为什么会是这样的答案,求解释
int x = 1,y=1;if(x++==2 & ++y==2){        x =7;}System.out.println("x="+x+",y="+y);//x=2,y=2

作者: shewim    时间: 2015-3-8 15:28
自增“++”:
在变量前,则先自增再参与所在语句的运算
在变量后,则是先参加语句运算再进行自增

&运算符不管左边的运算结果为什么,右边的语句都会被执行
&&运算符则在左边运算结果为false时,右边语句将不被执行。

1、上面中if的条件语句(x++==2 & ++y==2)中的x++为在变量后的情况,应该先参与运算后才自增,++y则是先自增在参加运算
因此上面程序if中判断时参与(x==2&y==2) 的x、y值分别为x = 1,y=2,显然x==2为false,则if条件语句为false,因此{x = 7;}不执行
2、虽然上面的if条件语句中的x != 2,但是在运行完x++==2语句或,x自增了,x = 2;因为条件语句中使用的是&,因此不管前面的运行结果,++y == 2都会执行,因此y = 2
综上,所诉,x = 2,y = 2
作者: cishengbuhuan    时间: 2015-3-8 16:39
shewim 发表于 2015-3-8 15:28
自增“++”:
在变量前,则先自增再参与所在语句的运算
在变量后,则是先参加语句运算再进行自增

说得好详细,谢谢
作者: cat73    时间: 2015-3-8 16:49
本帖最后由 cat73 于 2015-3-8 16:50 编辑
  1. int x = 1, y = 1;
  2. if(x++ == 2 & ++y == 2) {
  3.     x =7;
  4. }

  5. //x: 2, y: 2
  6. System.out.println("x: " + x + ", y: " + y);
复制代码

这样多好看
作者: yangruijing    时间: 2015-3-8 16:50
“&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
所以在你的判断语句中虽然x++==2为false,但是++y还是要进行自加的,所以打印的结果x、y的值都是2
作者: 弹剑高歌踏浪行    时间: 2015-3-8 17:51
shewim 发表于 2015-3-8 15:28
自增“++”:
在变量前,则先自增再参与所在语句的运算
在变量后,则是先参加语句运算再进行自增

厉害  学习了




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