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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 白磊 中级黑马   /  2013-9-15 20:59  /  2286 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 白磊 于 2013-9-16 06:57 编辑

&表示逻辑与,即使左边表达式为假,右边也要计算。这个怎么解释啊

7 个回复

倒序浏览
举例:
int a = 5;
if(a>6 & a<10){
  //代码
}
上面的条件用了&,我们知道a=5,是小于6的,所以第一个条件就不满足,但是不管满足不满足,&后面的a<10都会去判断一下,如果你用的是&&,上面的条件中,a<10就不会执行了

另外,&还是个位运算符,在位运算中,二进制的0表示假,1表示真,只有两个都为真,&的结果才为真,举例:
  1001 0011
&1000 1101
---------------------
  1000 0001

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
&是逻辑与,即使左边的表达式为假还是会算另一边的,而&&是短路与,有短路功能,只要左边表达式一旦为假,就不算后面的了;例如if(s !=null && !s.equals("")),这个表达式当s等于null,后面的就不执行,就不会产生空指针异常,如果改为&,则会产生空指针异常。另外&还可以用作位运算符,,当表达式两边不是布尔型的话,就会进行按位与操作。

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1 下次可以按照自己的想法来写。.

查看全部评分

回复 使用道具 举报
本帖最后由 雪龙 于 2013-9-15 21:34 编辑

&和&&的区别是什么

&表示逻辑与,&&表示短路与,与数学中的“并且”是一个意思,并且用法几乎也是相同的。
只不过在计算的时候有一点区别
举个例子    a&b  如果a为真就需要判断b的真假,如果b也为真则这个判断为真,如果b为假这个判断为假。
                        但是如果a为假不会判断这个表达式为假而是会去继续判断b的值,虽说此时的判断已经没有意义了
             而 &&则不同, a&&b 在a为真时和&的判断是一样的。而在a的值为假时会直接判断表达式的值为假不会再去判断b的值是真还是假了。


评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1 赞一个!

查看全部评分

回复 使用道具 举报
& 是位运算与,即按二进制进行按位与,举例来说:
    十进制的10对应的二进制为1010,十进制的11对应的二进制为1011,当10&11时,两个二进制数组进行按位与计算,结果为1010,对应的十进制为10,所以10&11=10.
&& 是逻辑与,也就是说进行的是boolean的逻辑运算,&&两边都为true时if语句的判断结果才是true,其中有一边为false,则条件判断为false。当然如果&&左边已经是false,就不会再对右边进行判断,就可以知道条件判断是false了。
回复 使用道具 举报
  &和&&都可以用作逻辑与的运算符,表示逻辑与(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)不会增长
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。
回复 使用道具 举报
破浪 初级黑马 2013-9-16 00:58:02
7#
本帖最后由 破浪 于 2013-9-16 01:04 编辑

其实嘛   一个就是效率的区别,还有一个就是结果可能不同的区别(条件1)&&(条件2)当  条件1 执行结果为flase 后面条件2 不会执行
(条件1)&(条件2) 2个条件都会执行

如果条件1 a=0 是(3<1)&&(a++>1) 那么 a的值最后还是0
如果条件1 a=0 是(3<1)&(a++>1) 那么 a的值就是1了


回复 使用道具 举报
刘亮 中级黑马 2013-9-16 06:47:18
8#
通俗点讲,&就是等号左边无论结果如何 右边也会运行。
          &&左边错误的话,右边不运行。 比&更有效率。一般的话,变成会用&&
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马