黑马程序员技术交流社区

标题: 请问&和&&有什么区别 [打印本页]

作者: 罗宝    时间: 2012-11-4 13:27
标题: 请问&和&&有什么区别
本帖最后由 罗宝 于 2012-11-6 22:10 编辑

                帮忙解释一下,&和&&都有什么区别?
作者: 金曦    时间: 2012-11-4 13:58
&是位运算符,&&是布尔逻辑运算符而且是短路与操作符。
注意:&就根本不应该作为逻辑运算用的。所谓的可以作为逻辑运算实际上是判断运算的结果是不是等于0,而由于要进行逻辑与操作,必须先要求出两边操作数的值(这个就好像是非短路了)。不过这不是java语言所支持的,混淆了和C的区别。绝对错误的概念。
& 是按二进制的按位与,即 1 & 1 = 1   1 & 0 = 0   3 & 1 → 11(二进制) & 1 = 1
&& 是逻辑与,true & true = true, true & false = false
作者: 林剑    时间: 2012-11-4 14:00
&和&&都是逻辑与的运算符,不同之处在于:&&有短路功能,第一个表达式为false时,不再计算第二个表达式;&则会计算两个表达式
                                                            &还可以用作位运算符
作者: 刘士林    时间: 2012-11-4 14:49
&既可以做位运算符,也可以做逻辑运算符
&&只能做逻辑运算符
&在做位运算符时,只有全为1时,结果才为1
   在做逻辑运算符时,两边都要判断,两边全为true,结果才为true,
&&在做逻辑运算时, 会有短路现象,即第一个为false时,不再判断第二的值,直接返回false
     相比之下,效率高一些
&&一般用在if的条件表达式或者循环结构的循环条件中
作者: 丁桂松    时间: 2012-11-4 15:03
  &和&&都可以用作逻辑与的运算符,表示逻辑与(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。
  
作者: 秦久启    时间: 2012-11-4 15:18
这个是短路与和非短路与的区别,给你举几个例子就可以简单的理解:
1:    &的作用
  1. <div class="blockcode"><blockquote>public class Demo{
  2.      public static viod main(String args[]){
  3.          if(10!=10&10/0==0){
  4.            System.out.println("条件满足");
  5.         }
  6.     }
  7. }
复制代码
程序运行有错误,原因在于&的操作要把所有的条件进行判断。
2:  &&的作用
  1. public class Demo{
  2.         public static viod main(String args[]){
  3.               if(10!=10&&10/0==0){
  4.                System.out.println("条件满足");
  5.             }   
  6.        }
  7. }
复制代码
程序运行后,就可以发现不再出现以上的错误,原因在于,第一个条件不满足,那么后面的条件就不再判断了。

作者: 刘丽娜    时间: 2012-11-4 15:28
上面解释的都已经很清楚了




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