黑马程序员技术交流社区
标题:
&和&&的区别?
[打印本页]
作者:
毛溯澜
时间:
2012-2-1 16:36
标题:
&和&&的区别?
本帖最后由 毛溯澜 于 2012-2-1 17:11 编辑
&和&&的区别?
作者:
彭嘉聪
时间:
2012-2-1 16:47
这事黑马视频里面的讲解:
&和&&的特点:
&:无论左边是true是false。右边都运算。
&&:当左边为false时,右边不运算。
作者:
陈时峰
时间:
2012-2-1 17:02
使用&&进行多个表达式的判断的时候,它会按照顺序从第一个表达式计算下去,
如果出现一个表达式的值为false,这就意味着整个表达式的值为false,就没必要
计算剩余的表达式,那样只是浪费,我们可以成为“短路”。而&则不同。
1==1&&1==2&&2==2
复制代码
以上的表达式并不会计算2==2的值,因为当计算到1==2时,整个表达式就结束
了,值为false。
作者:
荣凯旋
时间:
2012-2-1 18:31
本帖最后由 荣凯旋 于 2012-2-1 18:33 编辑
& 两边的变表达式都参与运算~
&& 当左边为false 时 右边不参与运算啦~ 当为true是 右面才运算
关于运算符的问题,论坛里有很多很全面的回答· 以后不然提着重复性的问题~
不要为了刷技术分就有灌水成分!建议多看看别人在论坛里提的什么问题`~寻找自己问题是不是在论坛中已经有啦明确回答~
作者:
许涛
时间:
2012-2-1 18:42
本帖最后由 许涛 于 2012-2-1 18:44 编辑
&和&&
&: 无论左边数据是ture是false。右边数据都参与运算
&&:当左边数据为false时,右边数据不运算,结果直接为false
当左边数据为ture时,右边数据参与运算
再顺便说下,|和||
|: 无论左边数据是ture是false。右边数据都参与运算
||: 当左边数据为true时,右边数据不运算,结果直接为true
当左边数据为false时,右边数据参与运算
作者:
任增涛
时间:
2012-2-3 01:50
&:这个好像加减乘除一样!无论两边数怎么变都得算!
&&:这个的表现形式是这样的a&&b&&c&&d.......&&前面必须是ture后面才能继续去运算,无论&&前后只要出现是false,这个表达式比为false,只有&&前后都为真是表达式才为真
作者:
吴超
时间:
2012-2-3 12:16
& 两边的变表达式都运算
&&具有短路的功能,即左边表达式为false,则不再计算另一个表达式
作者:
曾辉
时间:
2012-2-3 13:28
&和&&都可以用作逻辑与的运算符,表示逻辑与(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-2-5 10:25
&既是位运算符也是逻辑运算符,&&只是逻辑运算符,&与&&同时作为逻辑运算符时&&是短路的,而&并不短路.
即&运算符,即使左边是false,也要执行右边代码.当&&的左边是false,右边就不代码就不执行了.
还有一点需要指出的区别就是
逻辑与(&&)在Java中运算符必须是boolean类型的,而按位与(&)可以是int类型的:
例:
System.out.println( 5&3);//(代码1) 打印结果1
System.out.println ( i++ == 1 && i++ == 2);//打印false
作者:
孙汇川
时间:
2012-2-5 11:09
我感觉&&只是比&多了个短路的功能。&和&&都可以用作逻辑与的运算符,表示逻辑与(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-2-5 21:47
&和&&的区别,楼主可以参考下面几段程序,来区别:
&的测试代码:
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("条件满足");
}
}
}
程序运行后,前面的报错信息没有了,就是因为&&前面一个条件不满足,那么后面的条件就不判断了,这就是短路与。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2