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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 18353666072 中级黑马   /  2014-6-6 23:11  /  2040 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如下,打印a的值为什么是11 而不是12
  1. public void test(){
  2.     int a = 10;
  3.     if( a > 0 ||  (a++) )
  4.          ++a;
  5.     System.out.println(a);
  6. }
复制代码


求大神解释,谢谢{:3_64:}

点评

gtf
这里主要要了解双或(||)的含义,当使用双或的时候如果左边是真的,那么结果一定为真,所以这时候就不会再执行右边了,这是双或和单或的区别。  发表于 2014-6-30 20:37

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

25 个回复

倒序浏览
本帖最后由 小草君 于 2014-6-6 23:17 编辑

这是短路或,前面a>o了就为真了,短路或遇见真就为真了,不执行后面了,后面a++就不判断了且也不执行了,直接执行下面的++a,10+1=11,所以打印的是11

点评

厉害!!!!!  发表于 2014-6-8 15:37

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 1 1
||  短路或,正因为是短路,是因为执行a > 0 以后结果为真不再执行之后的内容.
回复 使用道具 举报 1 0
++玩之后再打印
回复 使用道具 举报 1 0
首先呢  你要知道双或(||)的用法,它代表着左边为真的时候右边不运算,当左边为假时右边运算。而你的程序a>10满足条件那么右边不运算。这时执行到下边++a,给a进行加1的运算,并把加1操作后的结果重新赋给了a,所以打印的结果是11.楼主可以好好看视频里边的算数运算符这一块,毕老师讲的很详细的。
回复 使用道具 举报 1 0
||的用法:它代表短路或,和|是有区别的,那什么是短路或呐,就是当他的左边判断为真的时候,这个表达式的结果就是真了,右边就不需要判断了,因而就像短路了一样,所以说他是短路或,而对于| ,无论左边是否为真,右边都必须要判断。
相应的&&和&的区别,也是一样,一个是当左边为false,只需要判断左边,就知道为假,右边是不需要判断的,另一个是无论左边真假,右边都需要判断。

下面的程序希望能帮助你理解:
class TestDemo
{
        public static void main(String[] args)
        {

      /*
      int a = 10;
      if( a > 0 | a++>10)
         ++a;
      System.out.println(a);//结果是12
     */


    int a = 10;
    if( a > 0 ||  (a++) )
         ++a;
    System.out.println(a);//结果是11
        }
}

回复 使用道具 举报
哥们,你这样  || a++写语法错误了。
回复 使用道具 举报
a>0或a++的条件下,a>0成立,所以直接跳转至下面的执行语句,a+1
回复 使用道具 举报
如同楼上各位所说,就是| 和||的区别,
回复 使用道具 举报
因为你用的是双或,就是短路或,只要两个表达式中有一个为TRUE,就为TRUE,使用双或的时候你左边为真了,然后右边不会执行,直接执行++a,所以是11,如果你用单或结果就是12.不知道楼主明不明白
回复 使用道具 举报
||运算,只要左边为真,右边是不参与运算的,也就是说a > 0 ||  (a++)的右边(a++)并不执行,a值自增一次,
回复 使用道具 举报
杨胜男 发表于 2014-6-8 09:29
||运算,只要左边为真,右边是不参与运算的,也就是说a > 0 ||  (a++)的右边(a++)并不执行,a值自增一次, ...

嗷嗷{:3_52:}
回复 使用道具 举报
\(^o^)/ 发表于 2014-6-8 01:30
因为你用的是双或,就是短路或,只要两个表达式中有一个为TRUE,就为TRUE,使用双或的时候你左边为真了,然 ...

明白了{:3_59:}
回复 使用道具 举报
首先,
if( a > 0 ||  (a++) )
就无法通过编译

其次,我大概明白你是想问的这个||,为了区分|,我们来举个例子
A|B
意思是A或者B为true,A与B都要分别判断一下
A||B
意思也是A或者B为true,但是如果A为true,整个表达式就为true了,B就没有必要再判断了,
因此,通常用||,可以提高代码性能
回复 使用道具 举报
|| 是逻辑或符号, 先判断左边是否为真,如果为真 这不再判断右边,为假再判断右边
右边的a++ 是没有执行的
回复 使用道具 举报
学习了啊
回复 使用道具 举报
短路了,判断到a>0为true就不会再去执行或判断 || 后面的语句
回复 使用道具 举报
楼上已经说完了
回复 使用道具 举报
因为a>0就已经满足条件 a++ 先加后赋值,所以打印的值是11了
回复 使用道具 举报
短路与!!!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马