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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王永贺 高级黑马   /  2013-4-26 22:44  /  2873 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王永贺 于 2013-5-3 14:53 编辑

if(a==b&&c==d){}和if(a==b){if(c==d)}的区别是不是 前者是当两者条件同时成立是才执行,后者是先判断a==b当其满足时在判断后面的c==d,有先后顺序     而前者没有先后顺序。求详解。

评分

参与人数 1技术分 +1 收起 理由
王怀亮 + 1

查看全部评分

18 个回复

倒序浏览
都是先判断前面的。
这里是没什么区别的。

评分

参与人数 1黑马币 +6 收起 理由
王怀亮 + 6

查看全部评分

回复 使用道具 举报
楼主说法是对的:
if(a==b&&b==c){}必须要两个条件同时满足时,才能执行{}里的代码;
而if(a==b){if(b==c){}}第一个a==b满足时,才能执行{}的if语句。反之就不执行。此外,如果满足a==b而不满足b==c,则{}的if语句不执行,执行{}里面其他代码;
两者有很大的差别。

评分

参与人数 1技术分 +1 收起 理由
王怀亮 + 1

查看全部评分

回复 使用道具 举报
都是先判断a==b才能去判断c==d;
前者是a==b了在去判断右边的c=d;而另一个是a==b了在进到if里面去做判断
两个都是如果左边不符合就不会去右边判断或到if里面执行代码了

评分

参与人数 1技术分 +1 收起 理由
王怀亮 + 1

查看全部评分

回复 使用道具 举报
楼主的分析是正确的。
if(a==b&&c==d){}执行过程是程序先判断逻辑表达式的值,a==b&&c==d当值为true时,执行{语句体},反之false,则不执行语句体。
if(a==b){if(c==d){}}执行过程是先判断逻辑表达式a==b,当值为false时,则不执行{if(c==d){}},当值为true,执行{if(c==d){}}语句体,
语句体里嵌套一个语句体,依次判断表达式c==d的值,值true时,执行{}空语句体,flase则不执行。

评分

参与人数 1技术分 +1 收起 理由
王怀亮 + 1

查看全部评分

回复 使用道具 举报
确实是一样的

if(a==b&&c==d){}
这个是前面的条件为假的时候,就不判断后面的了.
这个&&这个短路符号特征
后面的for循环嵌套也是先判断前面的.
都一样!很好!

评分

参与人数 1技术分 +1 收起 理由
王怀亮 + 1

查看全部评分

回复 使用道具 举报
两者是有区别的 大家看看这个代码
  1. public class Songer {
  2.         static int[] num=new int[11];
  3.         static void fn(int sum, int n) {
  4.                 if(n>10)
  5.                 {
  6.                         if(sum==100)    //不能写成if(n>10&&sum==100)
  7.                         {
  8.                 for (int i = 1; i < 11; i++)
  9.                         System.out.print(num[i]);
  10.                
  11.                 System.out.println();
  12.                 }
  13.                        
  14.                
  15.                 }
  16.                         else
  17.                         {
  18.                                 for (int i = 0; i <=1; i++) {
  19.                                         num[n]=i;
  20.                                         if(i==0)
  21.                                         {sum-=n;
  22.                                         fn(sum, n+1);
  23.                                         sum+=n;
  24.                                         }
  25.                                         else {
  26.                                                 sum*=2;
  27.                                                 fn(sum, n+1);
  28.                                         }
  29.                                 }
  30.                         }
  31.         }
  32.         public static void main(String[] args)throws Exception {
  33.                 // TODO Auto-generated method stub
  34.                 fn(10, 1);
  35.         }

  36. }



复制代码

评分

参与人数 1技术分 +1 收起 理由
王怀亮 + 1

查看全部评分

回复 使用道具 举报
黑马-张超 发表于 2013-4-26 23:52
确实是一样的

if(a==b&&c==d){}

两者不一样 ,分先后顺序判断的 你可以运行下6楼的代码
回复 使用道具 举报
殇_心。 发表于 2013-4-26 22:57
都是先判断前面的。
这里是没什么区别的。

两者不一样 ,分先后顺序判断的 你可以运行下6楼的代码
回复 使用道具 举报
本帖最后由 sos3542 于 2013-4-27 14:19 编辑

不一样~~ 分先后执行顺序
&&路与,如果左边为false,那么右边不参数与运算
前者是先执行a==b&&c==d在执行下一条语句,后者是先执行a==b条件满足才执行c==d。
在内存中也是不一样的~前者在内存中会出4个局部变量a,b,c,d然后在进行判断是否满足条件,后者内存中先出现a,b满足条件以后才出现c,d执行完后c,d会先消失
我是这样理解的

评分

参与人数 1技术分 +1 收起 理由
王怀亮 + 1

查看全部评分

回复 使用道具 举报
王永贺 发表于 2013-4-27 12:31
两者不一样 ,分先后顺序判断的 你可以运行下6楼的代码

我的意思是判断。。 顺序是先前。。
  没说执行代码。
回复 使用道具 举报
if(a == b && c == d) //当a不等于b时,就会短路,就不会执行c == d这个判断了.如果a等于b的话,就会判断后面c是否等于b

if(a == b) {            //和上面的执行是一样的,只是上面是在条件里C == d ,而这个是执行体内.
c == d
}

评分

参与人数 1技术分 +1 收起 理由
王怀亮 + 1

查看全部评分

回复 使用道具 举报
if里的判断条件是有先后顺序的,在前面的先判断。if(a==b&&c==d){}这个是前面的条件为假的时候,就不判断后面的了.而if(a==b){if(b==c){}}第一个a==b满足时,才能执行{}的if语句。反之就不执行。此外,如果满足a==b而不满足b==c,则{}的if语句不执行,执行{}里面其他代码;
回复 使用道具 举报
if(a==b&&c==d){}这条语是当a==b和c==b条件都为真时才会执行后面大括号里面的内容,另外&&有个特点就是当a==b条件为假时后面的c==b就执行不到了。
而if(a==b){if(c==d)}是当a==b为假是不执行大括号里的内容,为真时才执行大括号里面的内容。
回复 使用道具 举报


如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
对if(a==b&&c==d){}来说 先判断a==b 是true还是fause 1:若a==b为真  接着判断c==d的真假 若为真 执行循环体 若为假 跳出循环体 2:若a==b为假 则不需判断c==d的真假 直接跳出循环体 这是因为&&会出现短路
对if(a==b){if(c==d)}来说 这是个循环嵌套 先判断最外层条件 若a==b为真 则执行循环体 判断里层的循环条件 若a==b 为假 则直接跳出循环体 不必再判断里层循环条件
回复 使用道具 举报
其实,if(a == b && c == d) 跟 if(a==b){ if(c == d)}两者
最本质的区别就是前者是一个程序语句,而后者是两个联系的带有
层次关系的语句。结构是不同的,感觉没有什么比较的意义
回复 使用道具 举报
if(a==b&&c==d){}要求是同时满足这两个条件语句才会继续执行,而if(a==b){if(c==d)}要先判断a是否等于b,若等于则继续判断if(c==d),不等于则跳出,if(c==d)语句不再执行
回复 使用道具 举报
感觉楼主有点不对的地方。前者也有先后顺序,会先判断a==b  如果为false 后半句将不予判断。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马