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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵喜平 中级黑马   /  2013-3-29 22:35  /  1813 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test
{
           private static int j =  0;
          
        public static void main(String[] args)
        {
               methodA(0);
               System.out.println(j);
        }
        
        public static boolean methodB(int k)
        {
              j += k;
              return true;
        }
        
        public static void methodA(int i)
        {
                boolean b;
                b = i < 10 | methodB(4);             //这句给个注释
                b = i < 10 || methodB(8);         //这句话为什么不执行
        }
}
b = i < 10 | methodB(4);   这句到底是如何运行的?    (b = i < 10 )| methodB(4);   这样?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

18 个回复

倒序浏览
i的值赋给b,然后与10比较,结果为false或者true,然后再执行methodB(4),一个为false结果为false,两个都为true,结果才为true

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
首先跟你说说|和||,&和&&的区别,两个的叫“短路或”和“短路与”,如果前面一个表达式能够判断整个表达式的值,那么后面的表达式就不再执行,二“|”和“&”无论前面的能否判断出结果,后面的表达式都会执行。
就上面的情况来说吧
  主函数调用methodA(0)方法;i=0小于10是true,b=true,然后再执行 methodB(4),j=4.打印j=4.
  b = i < 10 || methodB(8);         //由于用的是短路或,前面的表达式为真,后面的就不再执行了!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
张宝 发表于 2013-3-29 22:49
i的值赋给b,然后与10比较,结果为false或者true,然后再执行methodB(4),一个为false结果为false,两个 ...

亲!>优先级比=的高,b都是布尔型的,怎么能赋值int型的呢!是先传进来了一个0给i然后再<10为真,把true赋值给b。上面的是因为短路或和或造成的不同结果的哦!
回复 使用道具 举报
在java中,不是有一个运算符号的优先级的比较的表吗?看一下就OK了?
回复 使用道具 举报
| 和 & 所有条件都要判断完
|| 和 &&  当条件不满足时,直接结束,不再判断后面的

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
Keith 中级黑马 2013-3-29 23:32:00
7#
(b = i < 10 )| methodB(4) 对,
或,一真则真;与,一假则假。
&  &&,|   ||。两个的效率要高一些,&&左边假则不算右边,直接假; ||左边真,则不算右边,直接真。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
| 相当于 或者
有一边为true,那结果就是true
| 和|| 区别是
|| 又叫短路语
如果左边为false,右边无论真假整体都为false
| 还要判断
||直接短路,后边不判断

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
赋值运算符优先级最低。|  和 ||优先级比 < 低。
b = i < 10 | methodB(4); //判断i是否小于10,然后与后面函数的返回值相或;i<10并且methodB(4)返回true,所以这里的b为true。
b = i < 10 || methodB(8); //||只要前者为真就不判断后者。i<10,所以b为true,methodB(8)不执行。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
是这个样子执行的:b=((i<10) | methodB(4));第二句是逻辑或短路引起的;亲,消亡对你有帮助

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
黑马-郑玉元 发表于 2013-3-29 22:56
亲!>优先级比=的高,b都是布尔型的,怎么能赋值int型的呢!是先传进来了一个0给i然后再 ...

O(∩_∩)O谢谢,亲,分析的很透彻
回复 使用道具 举报
张宝 发表于 2013-3-29 22:49
i的值赋给b,然后与10比较,结果为false或者true,然后再执行methodB(4),一个为false结果为false,两个 ...

:handshake
回复 使用道具 举报
张昶 发表于 2013-3-29 22:56
在java中,不是有一个运算符号的优先级的比较的表吗?看一下就OK了?

:handshake
回复 使用道具 举报
Keith 发表于 2013-3-29 23:32
(b = i < 10 )| methodB(4) 对,
或,一真则真;与,一假则假。
&  &&,|   ||。两个的效率要高一些,&& ...

:handshake
回复 使用道具 举报
疯狂程序 发表于 2013-3-30 00:01
| 相当于 或者
有一边为true,那结果就是true
| 和|| 区别是

:handshake
回复 使用道具 举报

RE: java基础运算符的问题

HM谢文辉 发表于 2013-3-30 00:14
赋值运算符优先级最低。|  和 ||优先级比 < 低。
b = i < 10 | methodB(4); //判断i是否小于10,然后与后面 ...

嗯,谢谢
回复 使用道具 举报
tshch1989 发表于 2013-3-30 00:16
是这个样子执行的:b=((i

亲,你所指的”消亡“是?:L
回复 使用道具 举报
打错啦,是希望来哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马