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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lvwenwen88 黑马帝   /  2012-1-1 17:35  /  3692 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lvwenwen88 于 2012-1-4 11:19 编辑

说说&和&&的区别

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

10 个回复

倒序浏览
&在判断的时候是判断两次以后得出结果
而&&是在判断第一次的时候如果返回的是false 那么就不会执行&&后的判断语句了
有时候&&可以提高程序的运行效率

评分

参与人数 1技术分 +2 收起 理由
吴上储 + 2

查看全部评分

回复 使用道具 举报
&和&&都可以用作逻辑与的运算符,表示逻辑与(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。

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
吴上储 + 1
刘基军 + 3 赞一个!

查看全部评分

回复 使用道具 举报
&是前面的和后面的都不判断后执行下面的语句,而&&是只要前面的满足了后面的就不在判断了,从而提高了效率
回复 使用道具 举报

&是位运算,即按位与运算
&&是逻辑运算符,表示逻辑与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);
回复 使用道具 举报

RE: 说说&和&&的区别

&逻辑与,两个表达式相与,无论结果为true或false两个表达式都要计算出结果。
&&短路与,两个表达式相与,如果第一个表达式判定出了结果,则第二个表达式不计算。
回复 使用道具 举报
& 是短路与 (不管第一个条件是否为FALSE,都继续判断)
&& 是逻辑与 (如果第一个条件为FALSE,则终止判断)
回复 使用道具 举报
沈样 黑马帝 2012-1-2 19:36:42
8#
&与&&都是与,&&效率相对要高一些,因为&&的左边只要假就不用去判断右边的直接返回false;
回复 使用道具 举报
吕猛 黑马帝 2012-1-2 20:27:04
9#
&和&&这个都是数学中“和”“并且”的意思,只有两边的方程式都为正确,那这个&方为正确,只要有一个为假,那么这个式子的值就为假,
&   先看完左边的,再看右边。然后如果其中有一个为假或者都为假,结果就为假。
&&先看左边的,做个左边的值为假,直接返回式子的值为假。(因为左边为假的话,右边不管为真还是假,结果都是假)。
所以,&&比&效率高。
回复 使用道具 举报
简单点记就是,&无论左边结果是什么,右边肯定会参与运算,&&如果左边为false右边不运算。
回复 使用道具 举报
谢谢,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马