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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秦驰 黑马帝   /  2011-7-17 09:53  /  3389 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

&和&&的区别?

评分

参与人数 1技术分 +1 收起 理由
admin + 1 虽然知道你在抢分,但我理解你的心情

查看全部评分

10 个回复

倒序浏览
黑马网友  发表于 2011-7-17 10: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。(以上引用张孝祥就业面试题,因为老师说得很详细了,我觉得应该对你有帮助。)

评分

参与人数 1技术分 +2 收起 理由
admin + 2 你应该是看过张孝祥老师面试宝典的,不错!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-17 13:14:47
藤椅
& 是位运算符,&的运算结果只能是1或者0,这个我的很少用。也几乎没用
&& 是关系运算符,&&的运算结果才能是true或者false,这个不用说吧,就是我们代码里
if(这个位置的 关系判断 ){
}
晓得没
回复 使用道具 举报
黑马网友  发表于 2011-7-17 14:03:08
板凳
这样的都问题都可以刷分!!无语啦。。

&是位运算符  按位"与"的意思
81&(-69)=17
就是
01010001&10111011=00010001
懂了吗

&&是布尔逻辑运算符,起到短路的作用。当第一个操作数或表达式的值已经能够确定整个表达式的值时,将跳过第二操作数或子表达式而直接得出结果。。
例如
a为true
b为true
a&&b为true

a为true
b为false
a&&b为false

a为false
b为true
a&&b为false

a为false
b为false
a&&b为false

评分

参与人数 1技术分 +2 收起 理由
admin + 2 思路还是比较清晰,加分!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-17 16:54:44
报纸

回复 沙发 的帖子

正解!
但是  太长了,有点……(但是对于初学者却是有用!!)


& 位运算
&&   逻辑运算
&& 具有短路保护 从左向右运算


呵呵,这样写貌似对新手没什么帮助,权当api了

评分

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

查看全部评分

回复 使用道具 举报
&&   这两个被称为   "断路与"
&    这两个就是非

以||和|解释下:
断路执行效率更高一点.
假设if(a==b||c==d)   满足这个条件才进入if. 的时候,会先判断断路符号左边的. 如果左边的满足,才会再判断断路符号右边的.  也就是说,当a!=b的时候. 直接就等于false了. 而非断路符号的"|",不管左边是true还是false,都会执行右边的.然后再通过整个表达式判断最终结果.  所以执行效率高.   "断路与"也是同样的道理。
请看如下例子

例如:
class A{
public static void main(String args[]){
  boolean b;
  int i=0,j=0;
  b=i++>0&&++j>0;
   System.out.println("b="+b+"i="+i+"j="+j);
      i=j=0;
   b=i++>0&++j>0;
   System.out.println("b="+b+"i="+i+"j="+j);
}
  }
答案输出:

b=falsei=1j=0
b=falsei=1j=1
[ 本帖最后由 王海飞 于 2011-07-17  22:24 编辑 ]

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-17 22:25:57
7#
这都可以啊
回复 使用道具 举报
黑马网友  发表于 2011-7-17 22:32:36
8#
&&(短路与)与&的区别是:
如果是&,当左边为false时,右边也要运算。
如果是&&,当左边为false时,右边不会再运算了。

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-18 10:52:32
9#
短路与&&如果第一个表达式值为false,后边的表达式不需要运算。另外一个需要全部运算
(有必要很麻烦的回复?)

评分

参与人数 1技术分 +2 收起 理由
admin + 2 说得好!!!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-18 13:40:13
10#
&是位运算符,当前后都为时结果才为1。即1&1==1,1&0==0。
&&是关系运算符,当前后为true时结果才为true。即true&&true=true,flase&&true==false。

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-18 21:08:59
11#
结贴了,下面不要回了!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马