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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Super_Class 高级黑马   /  2013-5-2 16:41  /  1978 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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);
复制代码
下边这个是用&。结果不一样

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

9 个回复

倒序浏览
这个结果肯定是不一样的:    首先if(x++>4&&++y>5)   &&运算符判断x++>4为false的话  则后面的++y这个就不会做判断  ,所以++y这个没有执行
而对于(x++>4&++y>5)这个 &无论前面的为真还是为假,后面的条件都会做一次判断,所以++y这个会执行一次

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
&与&&的区别在于&是无论左边是true是false,右边都要进行要运算,&&是如果左边为假,右边则不参加运算。 &&提高了效率 呵呵
回复 使用道具 举报
注意&和&&的区别 (1)&&会出现短路,如果可以通过第一个表达式判断出整个结果的表达式的结果,则不继续后面表达式的运算 如 if(x++ > 4 && ++y > 5) 先判断x++>4 如题可知为假 所以后面的++y就不需要计算 且整个表达式的结果为假 所以x++这条语句不会执行
(2)&不会出现短路 整个表达式都会运算 虽然x++>4为假 但此时++y 仍会被运算 所以两者结果会不同
(3)同时也要注意 &&只能操作boolean类型数据 而&既可以操作boolean类型数据 还可以操作数

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
一楼是对的,就是&和&& 的区别
回复 使用道具 举报
&:只要两边的表达式结果,有一个为false,结果就是false,两边都为true时,结果才为true;无论左边是true是false,右边都运算
&&:当左边的表达式为true时,与&没什么不同;当左边为false时,右边不运算。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 赵然 于 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);

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
短路与非短路....
知道就行了
回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马