黑马程序员技术交流社区

标题: java基础运算符的问题 [打印本页]

作者: 赵喜平    时间: 2013-3-29 22:35
标题: java基础运算符的问题
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);   这样?
作者: 张宝    时间: 2013-3-29 22:49
i的值赋给b,然后与10比较,结果为false或者true,然后再执行methodB(4),一个为false结果为false,两个都为true,结果才为true
作者: 黑马-郑玉元    时间: 2013-3-29 22:51
首先跟你说说|和||,&和&&的区别,两个的叫“短路或”和“短路与”,如果前面一个表达式能够判断整个表达式的值,那么后面的表达式就不再执行,二“|”和“&”无论前面的能否判断出结果,后面的表达式都会执行。
就上面的情况来说吧
  主函数调用methodA(0)方法;i=0小于10是true,b=true,然后再执行 methodB(4),j=4.打印j=4.
  b = i < 10 || methodB(8);         //由于用的是短路或,前面的表达式为真,后面的就不再执行了!
作者: 黑马-郑玉元    时间: 2013-3-29 22:56
张宝 发表于 2013-3-29 22:49
i的值赋给b,然后与10比较,结果为false或者true,然后再执行methodB(4),一个为false结果为false,两个 ...

亲!>优先级比=的高,b都是布尔型的,怎么能赋值int型的呢!是先传进来了一个0给i然后再<10为真,把true赋值给b。上面的是因为短路或和或造成的不同结果的哦!
作者: 张昶    时间: 2013-3-29 22:56
在java中,不是有一个运算符号的优先级的比较的表吗?看一下就OK了?

作者: 苏冉    时间: 2013-3-29 22:56
| 和 & 所有条件都要判断完
|| 和 &&  当条件不满足时,直接结束,不再判断后面的
作者: Keith    时间: 2013-3-29 23:32
(b = i < 10 )| methodB(4) 对,
或,一真则真;与,一假则假。
&  &&,|   ||。两个的效率要高一些,&&左边假则不算右边,直接假; ||左边真,则不算右边,直接真。
作者: 疯狂程序    时间: 2013-3-30 00:01
| 相当于 或者
有一边为true,那结果就是true
| 和|| 区别是
|| 又叫短路语
如果左边为false,右边无论真假整体都为false
| 还要判断
||直接短路,后边不判断
作者: HM谢文辉    时间: 2013-3-30 00:14
赋值运算符优先级最低。|  和 ||优先级比 < 低。
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)不执行。
作者: tshch1989    时间: 2013-3-30 00:16
是这个样子执行的:b=((i<10) | methodB(4));第二句是逻辑或短路引起的;亲,消亡对你有帮助
作者: 赵喜平    时间: 2013-3-30 09:36
黑马-郑玉元 发表于 2013-3-29 22:56
亲!>优先级比=的高,b都是布尔型的,怎么能赋值int型的呢!是先传进来了一个0给i然后再 ...

O(∩_∩)O谢谢,亲,分析的很透彻
作者: 赵喜平    时间: 2013-3-30 09:39
张宝 发表于 2013-3-29 22:49
i的值赋给b,然后与10比较,结果为false或者true,然后再执行methodB(4),一个为false结果为false,两个 ...

:handshake
作者: 赵喜平    时间: 2013-3-30 09:40
张昶 发表于 2013-3-29 22:56
在java中,不是有一个运算符号的优先级的比较的表吗?看一下就OK了?

:handshake
作者: 赵喜平    时间: 2013-3-30 09:41
Keith 发表于 2013-3-29 23:32
(b = i < 10 )| methodB(4) 对,
或,一真则真;与,一假则假。
&  &&,|   ||。两个的效率要高一些,&& ...

:handshake
作者: 赵喜平    时间: 2013-3-30 09:41
疯狂程序 发表于 2013-3-30 00:01
| 相当于 或者
有一边为true,那结果就是true
| 和|| 区别是

:handshake
作者: 赵喜平    时间: 2013-3-30 09:43
标题: RE: java基础运算符的问题
HM谢文辉 发表于 2013-3-30 00:14
赋值运算符优先级最低。|  和 ||优先级比 < 低。
b = i < 10 | methodB(4); //判断i是否小于10,然后与后面 ...

嗯,谢谢
作者: 赵喜平    时间: 2013-3-30 09:44
tshch1989 发表于 2013-3-30 00:16
是这个样子执行的:b=((i

亲,你所指的”消亡“是?:L
作者: tshch1989    时间: 2013-3-30 10:18
打错啦,是希望来哈




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