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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李杰 初级黑马   /  2012-8-28 10:32  /  2117 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

尤其是if(a>b & b>c)
和 if(a>b && b>c)的不同

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
if(a>b && b>c)是只判断左边的a>b就不判断了 左边为flase就是flase
回复 使用道具 举报
&
false&true   false和true都需要判断真假,即使前面为假,后面还需要判断
false&&true 前面为假 后面就不需要判断,直接为假
第一示例:
int x = 1,y = 1;

if(x++==2 & ++y==2)//x++==2为假,但是任然执行++y
//所以y的值为2
{
        x =7;
}
System.out.println("x="+x+",y="+y);

-x=2,y=2
第二示例
int x = 1,y = 1;

if(x++==2 && ++y==2)//x++==2为假,直接不执行++y
//y结果为1
{
        x =7;
}
System.out.println("x="+x+",y="+y);

-x=2,y=1

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
&&是短路运算
比如
if(a>b && b>c)那么只判断第一个表达式a>b 是否的话,他就不会取判断后面那个表达式(b>c)
而&两个都会去判断!
这样&&的效率更高一些

同理可得| 和 ||区别  如如果左边表达式为ture  右边也不会判断
| 等同于 &
|| 等同于 &&

评分

参与人数 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。
以上是张老师面试宝典上说的,我认为说的很好了。
回复 使用道具 举报
(a>b && b>c) 换成数字表达更容易懂,比如 设a=1,b=0,c=2. (1>0&&0>2) 这个式子是逻辑真true
虽然右边的0>2是错的,但只要左边1>0是对的,整个式子就是true ,是逻辑短路现象
(a>b & b>c)
同样换成数字理解,(1>0&0>2)这个式子是逻辑假false,要是符号& 左右两边的式子同时成立才是true
回复 使用道具 举报
张金 中级黑马 2012-8-28 11:18:04
7#
解释的很详细啊,受教了。
回复 使用道具 举报
&和&&功能都是逻辑与连接符,为什么有两个?
可以这样记,因为&&比&多了一个&,所以&&功能更加强大了,多具备了一个短路的功能。
短路的意思就是说,在&&表达式中,如果判断左边的表达式为false,那么就执行了&&的短路功能,右边的表达式就短路了,右边的表达式就不用看了,程序也不读右边的表达式代码了,直接判断整个&&表达式结果为false。
而&没有短路功能,必须将两边的表达式都执行完,才给出整个表达式的结果。
在if(a>b & b>c)//&没有短路功能,所以两边都要执行到,先判断a>b再判断b>c,(不管右边的表达式是否影响结果,一定会读到右边的代码)
和 if(a>b && b>c)的不同//先判断a>b,如果为false,那么b>c就不读了。如果a>b为true再读右边的表达式b>c。
同理|和||区别也是这样。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马