黑马程序员技术交流社区

标题: 关于逻辑运算符 [打印本页]

作者: Super_Class    时间: 2013-5-2 16:41
标题: 关于逻辑运算符
本帖最后由 Super_Class 于 2013-5-4 07:02 编辑
  1.   int x = 4;
  2.                 int y = 5;
  3.                 if(x++>4&&++y>5){
  4.                         x++;
  5.                 }
  6.                 System.out.println("x= "+x+", y= "+y);

复制代码
以上是用&&
  1.   int x = 4;
  2.                 int y = 5;
  3.                 if(x++>4&++y>5){
  4.                         x++;
  5.                 }
  6.                 System.out.println("x= "+x+", y= "+y);
复制代码
下边这个是用&。结果不一样

作者: 一直在路上    时间: 2013-5-2 16:56
这个结果肯定是不一样的:    首先if(x++>4&&++y>5)   &&运算符判断x++>4为false的话  则后面的++y这个就不会做判断  ,所以++y这个没有执行
而对于(x++>4&++y>5)这个 &无论前面的为真还是为假,后面的条件都会做一次判断,所以++y这个会执行一次
作者: 花开花落总相似    时间: 2013-5-2 17:45
&与&&的区别在于&是无论左边是true是false,右边都要进行要运算,&&是如果左边为假,右边则不参加运算。 &&提高了效率 呵呵
作者: 飘哥1988    时间: 2013-5-2 18:01
注意&和&&的区别 (1)&&会出现短路,如果可以通过第一个表达式判断出整个结果的表达式的结果,则不继续后面表达式的运算 如 if(x++ > 4 && ++y > 5) 先判断x++>4 如题可知为假 所以后面的++y就不需要计算 且整个表达式的结果为假 所以x++这条语句不会执行
(2)&不会出现短路 整个表达式都会运算 虽然x++>4为假 但此时++y 仍会被运算 所以两者结果会不同
(3)同时也要注意 &&只能操作boolean类型数据 而&既可以操作boolean类型数据 还可以操作数
作者: peerless2012    时间: 2013-5-2 18:13
一楼是对的,就是&和&& 的区别
作者: 蔚蓝小嗨    时间: 2013-5-2 18:56
&:只要两边的表达式结果,有一个为false,结果就是false,两边都为true时,结果才为true;无论左边是true是false,右边都运算
&&:当左边的表达式为true时,与&没什么不同;当左边为false时,右边不运算。
作者: 赵然    时间: 2013-5-3 20:42
本帖最后由 赵然 于 2013-5-3 20:46 编辑

明白&与&&的区别这个题目就容易解决了。
&是两边都需要判断,&&是如果左边真的话继续判断右边是否为真,但是如果左边为假,则直接跳出if语句,&&右边的就不运行了。
                int x = 4;
                int y = 5;
                if(x++>4&&++y>5)//先判断x与4比较 不大于四所以直接跳出if语句然后执行x++所以x=5,y依然是5
                {
                        x++;
                }
                System.out.println("x= "+x+", y= "+y);


      int x = 4;
                int y = 5;
                if(x++>4&++y>5)//判断x与4比较 不大于四之后继续向下执行++y,y=6>5跳出IF语句。这是执行x++,所以到执行输出语句时是x=5,y=6
                {
                        x++;
                }
                System.out.println("x= "+x+", y= "+y);
作者: 刘胜寒    时间: 2013-5-3 21:42
短路与非短路....
知道就行了
作者: 黄玉昆    时间: 2013-5-3 21:52
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢




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