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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 陈团辉 于 2013-3-18 09:11 编辑

java中& 和&& 到底有什么区别?寻详细。。

点评

如果你的问题得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,谢谢!  发表于 2013-3-17 10:50

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

12 个回复

倒序浏览
小路飞 来自手机 中级黑马 2013-3-17 10:14:03
沙发
&&是短路与,只要前一个表达式为false,整个表达式的结果就为false,不必再计算后面表达式。
而&需要两边都计算后才能得到结果。
回复 使用道具 举报
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑运算与
如下 3&2这表示将三转换成2进制011  然后将2转换成2进制010 然后相与,同为1得1
011
010
--------
010  = 2
而&&则是代表逻辑运算,只有在&&前后的表达式都为真的时候,整个的表达式才为真,如果前面为假,则后面不执行,这称作短路
如下  1==1&&2==2 前后都为真,那这个表达式返回的才是真

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
&就是AND(与)的意思,比如A&B  ,如果,AB都是真的时候,那肯定是真,如果,有一个是假的时候,是假,A&&B和A&B的结果是一样的,但是,如果A是假,B是真的时候,单&,虽然算出来A是假,结果已经是假,但是,仍然会计算B的真假,但是双&&有个短路的功能,算出来A是假后,整个表达式的结果已经是假,那么就不会计算B是真还是假了。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
&:单与,判断两边都要看,也就是说两边都要运算,不管&左边的表达式是真是假。
&&:双与,判断时,若左边表达式为假,就不在判断右边了,因为右边无论真假其结果都为假。若左边表达式为真,继续判断右边。
通常考察这个知识点,是通过右边是否执行运算了没有。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
&:可以用作条件判断位运算
        当用作条件判断的时候比如boolean c = a&b;它会判断a和b两个的值,只有a和b都为真时,c才为真(true)。
     当用作运算符的时候,一般都是用来判断该位的值是否为1
&&:只能用作条件判断,但是它的执行效率比&高。虽然它也是只有两边都为真的时候才返回true。但是当它判断第一个(左边)值为false时,就不会再看下一个值。而&不管左边是真还是假,都会去判断右边的值。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
&和&&的特点:
                &:无论左边是true是false。右边都运算。
                &&:当左边为false时,右边不运算。
例如
true & true = true;
                true & false = false;
                false & true = false;
                false & false = false;

                & : 只要两边的boolean表达式结果,有一个为false。那么结果就是false。
                        只有两边都为true,结果为true

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
& 是位运算符,就是两个二进制位同时等于1,结果才等于11 & 1 == 1而0 & 1 == 0
&& 是关系运算符,就是两个值同时为真,结果才为真 true && true == true 而false && true == false

比如if(2==1&1==1){} //这里2==1是不成立的 ,&(且)还会在执行 1==1发现不成立 返回false 总之就是执行所有判断 才返回结果if(2==1&&1==1){} //执行2==1 false 因为 &&(且) 是同真为真 一个假为假 所以 执行到第一个是 false 就没必要执行后面的1==1了 不管&&后面是什么  都是false

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

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

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
&和&&都可以用作逻辑与的运算符,当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。

&&还叫短路与,即如果第一个表达式为false,则不再计算第二个表达式直接得到结果;&不会产生短路,会将整个式子运算完才得到结果。
          
&还是位运算符,简单说就是操作二进制的,与逻辑与运算规则一样。非0为真,0代表false,1代表true。,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。
回复 使用道具 举报
这个问题也能加技术分啊。。。。。。愁
回复 使用道具 举报
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马