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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 毛溯澜 黑马帝   /  2012-2-1 16:36  /  2509 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 毛溯澜 于 2012-2-1 17:11 编辑

&和&&的区别?

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

10 个回复

倒序浏览
这事黑马视频里面的讲解:
&和&&的特点:
&:无论左边是true是false。右边都运算。
&&:当左边为false时,右边不运算。

评分

参与人数 1黑马币 +5 收起 理由
荣凯旋 + 5

查看全部评分

回复 使用道具 举报
使用&&进行多个表达式的判断的时候,它会按照顺序从第一个表达式计算下去,
如果出现一个表达式的值为false,这就意味着整个表达式的值为false,就没必要
计算剩余的表达式,那样只是浪费,我们可以成为“短路”。而&则不同。
  1. 1==1&&1==2&&2==2
复制代码
以上的表达式并不会计算2==2的值,因为当计算到1==2时,整个表达式就结束
了,值为false。

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 荣凯旋 于 2012-2-1 18:33 编辑

& 两边的变表达式都参与运算~
&&  当左边为false 时 右边不参与运算啦~ 当为true是 右面才运算
关于运算符的问题,论坛里有很多很全面的回答· 以后不然提着重复性的问题~
不要为了刷技术分就有灌水成分!建议多看看别人在论坛里提的什么问题`~寻找自己问题是不是在论坛中已经有啦明确回答~

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 许涛 于 2012-2-1 18:44 编辑

&和&&
&:  无论左边数据是ture是false。右边数据都参与运算
&&:当左边数据为false时,右边数据不运算,结果直接为false
        当左边数据为ture时,右边数据参与运算

再顺便说下,|和||

|:   无论左边数据是ture是false。右边数据都参与运算
||:  当左边数据为true时,右边数据不运算,结果直接为true
        当左边数据为false时,右边数据参与运算

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
&:这个好像加减乘除一样!无论两边数怎么变都得算!
&&:这个的表现形式是这样的a&&b&&c&&d.......&&前面必须是ture后面才能继续去运算,无论&&前后只要出现是false,这个表达式比为false,只有&&前后都为真是表达式才为真

评分

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

查看全部评分

回复 使用道具 举报
& 两边的变表达式都运算
&&具有短路的功能,即左边表达式为false,则不再计算另一个表达式
回复 使用道具 举报
曾辉 黑马帝 2012-2-3 13:28:19
8#
&和&&都可以用作逻辑与的运算符,表示逻辑与(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

查看全部评分

回复 使用道具 举报
&既是位运算符也是逻辑运算符,&&只是逻辑运算符,&与&&同时作为逻辑运算符时&&是短路的,而&并不短路.
即&运算符,即使左边是false,也要执行右边代码.当&&的左边是false,右边就不代码就不执行了.
还有一点需要指出的区别就是
逻辑与(&&)在Java中运算符必须是boolean类型的,而按位与(&)可以是int类型的:
例:
System.out.println( 5&3);//(代码1) 打印结果1
System.out.println ( i++ == 1 && i++ == 2);//打印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

查看全部评分

回复 使用道具 举报
&和&&的区别,楼主可以参考下面几段程序,来区别:
&的测试代码:
public class A{
public static void main(String[] args){
       
         if(10 != 10 & 10/0 != 0){//非短路与  
                 System.out.println("条件满足");
         }
}
        }
运行结果报错:Exception in thread "main" java.lang.ArithmeticException: / by zero
原因是:非短路与要把&两边的条件都进行判断,所以就算10/0时候就产生了错误。

&&测试代码:
public class A{
public static void main(String[] args){
       
         if(10 != 10 & &10/0 != 0){//短路与  
                 System.out.println("条件满足");
         }
}
        }
程序运行后,前面的报错信息没有了,就是因为&&前面一个条件不满足,那么后面的条件就不判断了,这就是短路与。       

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

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