黑马程序员技术交流社区

标题: 面试中的一个问题 [打印本页]

作者: 田磊阳    时间: 2013-3-13 20:43
标题: 面试中的一个问题
本帖最后由 田磊阳 于 2013-3-13 20:58 编辑

                               面试中的一个问题,问&与&&有什么区别,当时就懵了····用了好久的逻辑运算····竟然不知道
作者: 我自信我很牛    时间: 2013-3-13 20:47
&和&&很简单,&&会造成短路,例如a&&b先判断a的值,如果a为false则不会判断b,直接输出结果,这种会使得判断效率提高;|和||的区别和这个类似。
作者: 曹睿翔    时间: 2013-3-13 20:49
看来心里素质也很重要啊!&&(短路与或者称为条件与),前边为false时,后边的表达式就不再判断
作者: 黑马-陈思源    时间: 2013-3-13 20:53
&做判断条件时,(A)&(B),A和B都会做判断&&做判断条件时,(A)&&(B),只要A为false就跳出比较
希望对你有帮助~
作者: 罗威    时间: 2013-3-13 20:53
a & b  当 a是false,那么还得继续判断b  但是当b为true还是false    结果都是   false  那么你会不会觉得后面b的判断没有必要呢?
所以就有了 &&‘”
a && b  当a是false 那么b就不需要判断了  结果直接为 false      当a是true才进行b的判断  这样一来是不是感觉增加了运算效率?      
作者: 王军行    时间: 2013-3-13 20:54
&单个的是两边都要判断
&&如果左边是 false 右边就不判断了 断路 相当于路断了过不去了
| 两边都判断
|| 是左边是true右边就不判断了 短路(跳过去了)
作者: 樊玲    时间: 2013-3-13 20:55
注:为比较运算符。&    双&&为短路。
与的运算规则: 如果两边有一个是false,那么结果为false,全为ture, 结果为true
程序在执行的时候,& 左右的关系表达式,都会进行判断真假。
而双&&在进行判断时,如果判断左边的表达式就能出结果,右边就不执行了。所以称之为短路。
比如举一个简单的小例子:
       class Demo
{
        public static void main(String[] args)
        {
                int m=3;
                int n=4;
                System.out.println(m>n&m>n);  // 只要有一个为假,就为假。但执行&的时候,左边得出结果为假,右边还会进行判断。
                System.out.println(m>n&&m>n);//&&在执行的时候,左边得出结果为假,右边就不进行判断了。
        }
}

作者: 田磊阳    时间: 2013-3-13 20:57
曹睿翔 发表于 2013-3-13 20:49
看来心里素质也很重要啊!&&(短路与或者称为条件与),前边为false时,后边的表达式就不再判断 ...

结果这不都是一样吗·····
作者: 田磊阳    时间: 2013-3-13 20:58
烟磊磊 发表于 2013-3-13 20:47
&和&&很简单,&&会造成短路,例如a&&b先判断a的值,如果a为false则不会判断b,直接输出结果,这种会使得判 ...

哦哦,是的,效率是提高了
作者: 田磊阳    时间: 2013-3-13 20:59
樊玲 发表于 2013-3-13 20:55
注:为比较运算符。&    双&&为短路。
与的运算规则: 如果两边有一个是false,那么结果为false,全为ture,  ...

这样是不是就提高了效率?
作者: 黑马-李嘉欣    时间: 2013-3-13 21:03
&与&&区别:
&:无论左边是真是假,右边都运算;例如判断(1=3)&(1=1)时,左边为false,继续判断右边。
&&:当左边为假时,右边不运算;例如判断(1=3)&(1=1)时,左边为false,则右边就不必判断了,结果即为
相似的还有,|与||区别:
|:两边都参与运算,例如判断(1=1)&(1=3)时,左边为true,继续判断右边

||:当左边为真时,右边不运算(1=1)&(1=3)时,左边为true,右边就不判断了,结果即为true。
希望对你有帮助~



作者: 樊玲    时间: 2013-3-13 21:11
田磊阳 发表于 2013-3-13 20:59
这样是不是就提高了效率?

嗯嗯。必须地,提高了效率。。。
作者: 樊玲    时间: 2013-3-13 21:12
田磊阳 发表于 2013-3-13 20:59
这样是不是就提高了效率?

嗯嗯。必须地,提高了效率。。。
作者: 马甲大王    时间: 2013-3-13 22:02
&逻辑与,&&短路与
int a = 1;
int b = 2;
int c = 3;

①if((a>b)&(a>c))
②if((a>b)&&(a>c))

虽然两个表达式都是false,①表示两个小括号都要判断,②表示如果第一个小括号是false则就不判断第二个小括号内的表达式了。




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