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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 田磊阳 金牌黑马   /  2013-3-13 20:43  /  2036 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 田磊阳 于 2013-3-13 20:58 编辑

                               面试中的一个问题,问&与&&有什么区别,当时就懵了····用了好久的逻辑运算····竟然不知道

13 个回复

倒序浏览
&和&&很简单,&&会造成短路,例如a&&b先判断a的值,如果a为false则不会判断b,直接输出结果,这种会使得判断效率提高;|和||的区别和这个类似。
回复 使用道具 举报
看来心里素质也很重要啊!&&(短路与或者称为条件与),前边为false时,后边的表达式就不再判断
回复 使用道具 举报
&做判断条件时,(A)&(B),A和B都会做判断&&做判断条件时,(A)&&(B),只要A为false就跳出比较
希望对你有帮助~
回复 使用道具 举报
a & b  当 a是false,那么还得继续判断b  但是当b为true还是false    结果都是   false  那么你会不会觉得后面b的判断没有必要呢?
所以就有了 &&‘”
a && b  当a是false 那么b就不需要判断了  结果直接为 false      当a是true才进行b的判断  这样一来是不是感觉增加了运算效率?      
回复 使用道具 举报
&单个的是两边都要判断
&&如果左边是 false 右边就不判断了 断路 相当于路断了过不去了
| 两边都判断
|| 是左边是true右边就不判断了 短路(跳过去了)
回复 使用道具 举报
樊玲 中级黑马 2013-3-13 20:55:14
7#
注:为比较运算符。&    双&&为短路。
与的运算规则: 如果两边有一个是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);//&&在执行的时候,左边得出结果为假,右边就不进行判断了。
        }
}

评分

参与人数 1黑马币 +9 收起 理由
田磊阳 + 9 赞一个!

查看全部评分

回复 使用道具 举报
曹睿翔 发表于 2013-3-13 20:49
看来心里素质也很重要啊!&&(短路与或者称为条件与),前边为false时,后边的表达式就不再判断 ...

结果这不都是一样吗·····
回复 使用道具 举报
烟磊磊 发表于 2013-3-13 20:47
&和&&很简单,&&会造成短路,例如a&&b先判断a的值,如果a为false则不会判断b,直接输出结果,这种会使得判 ...

哦哦,是的,效率是提高了
回复 使用道具 举报
樊玲 发表于 2013-3-13 20:55
注:为比较运算符。&    双&&为短路。
与的运算规则: 如果两边有一个是false,那么结果为false,全为ture,  ...

这样是不是就提高了效率?
回复 使用道具 举报
&与&&区别:
&:无论左边是真是假,右边都运算;例如判断(1=3)&(1=1)时,左边为false,继续判断右边。
&&:当左边为假时,右边不运算;例如判断(1=3)&(1=1)时,左边为false,则右边就不必判断了,结果即为
相似的还有,|与||区别:
|:两边都参与运算,例如判断(1=1)&(1=3)时,左边为true,继续判断右边

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


回复 使用道具 举报
田磊阳 发表于 2013-3-13 20:59
这样是不是就提高了效率?

嗯嗯。必须地,提高了效率。。。
回复 使用道具 举报
田磊阳 发表于 2013-3-13 20:59
这样是不是就提高了效率?

嗯嗯。必须地,提高了效率。。。
回复 使用道具 举报
&逻辑与,&&短路与
int a = 1;
int b = 2;
int c = 3;

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

虽然两个表达式都是false,①表示两个小括号都要判断,②表示如果第一个小括号是false则就不判断第二个小括号内的表达式了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马