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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Ja2362

注册黑马

  • 黑马币:

  • 帖子:

  • 精华:

© Ja2362 注册黑马   /  2014-3-27 18:35  /  1206 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

初学java,&和&&总是分不清楚怎么使用,有区别吗?

8 个回复

倒序浏览

回帖奖励 +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 0
&和&&都可以用作逻辑与的运算符,表示逻辑与(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. /**
  2. *逻辑运算符**和位运算符*的区别和共同点
  3. *
  4. */
  5. public class LogicCharacter {
  6.    
  7. public static void main(String[] args) {
  8. int a=1,b=2;
  9. //-----------&&和&都有逻辑运算符AND的功能
  10. if(a==1&&b==2)
  11. {
  12.   System.out.println("ok1");
  13. }
  14. if(a==1&b==2)
  15. {
  16.   System.out.println("ok2");
  17. }
  18.     //-----------&&具有短路的功能
  19. String str=null;
  20. if(str!=null&&str.equals(""))
  21. {
  22.   System.out.println("ok3");
  23. }
  24. if(str!=null&str.equals(""))
  25. {
  26.   System.out.println("ok4");
  27. }
  28.     //----------&按位的处理
  29. System.out.println(0x31 & 0x0f);
  30. }

  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 举报
a&b  在执行的时候会判定a和b同时为true时返回true,如果a或b有一个为false就返回false,a和b都执行
a&&b 如果a为true才会执行b如果b也为true,则返回true,如果a为false,则直接返回false,不执行b语句
回复 举报
"&"逻辑与 a&b a.b都参与判断;
"&&"短路与a&&b,如果a为flase则不判断b,为false。
  1. package cn.itcast;

  2. public class Test{
  3.         public static void main(String args[]) {
  4.                 boolean a = false;
  5.                 boolean b = true;
  6.                 boolean c = a & b; //"&"逻辑与
  7.                 boolean d = a && b;//"&&"短路与
  8.                 System.out.println(c);
  9.                 System.out.println(d);
  10.         }
  11. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 举报
&位于运算符从左到右,在进制数转换的时候经常用到,&&逻辑运算符and,且的意思啊。用于逻辑判断if(a==0&&b==0)也就是两个都为真.
回复 举报
本帖最后由 李庆忠 于 2014-3-27 21:22 编辑

&:无论左边真假,两边都有判断:&&:只要左边为假,右边就不用判断了。比如;: int x = 3;       if (x>5&x<1)//  因为只有一个&,虽然左边为假,右边也要判断。
         而:   
            if(x>5&&x<1)//左边判断完x>5为假,右边就不需要判断了,这样可以提供代码效率   

评分

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

查看全部评分

回复 举报
有啊,都是逻辑运算符,不同点是:
a&b:   a如果成立了,b也需要运算的。
a&&b:  a如果成立了,那么,b就不会运算了。
实例:
public class Test2{
    public static void main(String[] args){
        int i=3;
        if((i++>5)&(i++<9)){
            System.out.println(i);
            System.out.println("恭喜,执行完了条件语句!");
        }
           System.out.println(i);
    }
}
结果是:    5
public class Test2{
    public static void main(String[] args){
        int i=3;
        if((i++>5)&&(i++<9)){
            System.out.println(i);
            System.out.println("恭喜,执行完了条件语句!");
        }
           System.out.println(i);
    }
}
结果是: 4

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 举报
&是位运算符,例如 3&2 。在计算机中数据是以二进制形式存在的 1:0000 0011 2: 0000 0010 当运算1&2时,相同位数都为一时,该位的计算结果为1,否则为0;故3&2后 变成了0000 0010.也就是十进制的2了。
&&是一个短路运算符。a&&b 既是当条件a和条件b同时为真时,整个a&&b结果为真,否则a&&b的结果为假。

评分

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

查看全部评分

回复 举报
您需要登录后才可以回帖 登录 | 加入黑马