黑马程序员技术交流社区

标题: 说说&和&&的区别 [打印本页]

作者: lvwenwen88    时间: 2012-1-1 17:35
标题: 说说&和&&的区别
本帖最后由 lvwenwen88 于 2012-1-4 11:19 编辑

说说&和&&的区别
作者: 王冀0127    时间: 2012-1-2 13:27
&在判断的时候是判断两次以后得出结果
而&&是在判断第一次的时候如果返回的是false 那么就不会执行&&后的判断语句了
有时候&&可以提高程序的运行效率

作者: 林康春    时间: 2012-1-2 13:30
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)y不会增长
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。
作者: 刘博    时间: 2012-1-2 13:34
&是前面的和后面的都不判断后执行下面的语句,而&&是只要前面的满足了后面的就不在判断了,从而提高了效率
作者: 想好了再写    时间: 2012-1-2 13:56

&是位运算,即按位与运算
&&是逻辑运算符,表示逻辑与and
&和&&有一个本质的区别
就如楼上所说
&&只要第一个条件是false,就不会去执行第2个条件
但&不管第一个条件是不是false,都会执行第2个条件
遇到这样的情况,结果就会不一样了
i=1;
j=1;
if(i++<0&j++){

}
log.info(j);
i=0;
j=1;
if(i++<0&&j++){

}
log.info(j);
作者: 赵晓波    时间: 2012-1-2 14:09
标题: RE: 说说&和&&的区别
&逻辑与,两个表达式相与,无论结果为true或false两个表达式都要计算出结果。
&&短路与,两个表达式相与,如果第一个表达式判定出了结果,则第二个表达式不计算。
作者: 林晓波    时间: 2012-1-2 17:45
& 是短路与 (不管第一个条件是否为FALSE,都继续判断)
&& 是逻辑与 (如果第一个条件为FALSE,则终止判断)
作者: 沈样    时间: 2012-1-2 19:36
&与&&都是与,&&效率相对要高一些,因为&&的左边只要假就不用去判断右边的直接返回false;
作者: 吕猛    时间: 2012-1-2 20:27
&和&&这个都是数学中“和”“并且”的意思,只有两边的方程式都为正确,那这个&方为正确,只要有一个为假,那么这个式子的值就为假,
&   先看完左边的,再看右边。然后如果其中有一个为假或者都为假,结果就为假。
&&先看左边的,做个左边的值为假,直接返回式子的值为假。(因为左边为假的话,右边不管为真还是假,结果都是假)。
所以,&&比&效率高。
作者: 李玉杰    时间: 2012-1-3 19:44
简单点记就是,&无论左边结果是什么,右边肯定会参与运算,&&如果左边为false右边不运算。
作者: lvwenwen88    时间: 2012-1-4 11:21
谢谢,学习了




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