黑马程序员技术交流社区

标题: 关于&与&&还有|与||的问题 [打印本页]

作者: 侯伟浩    时间: 2011-11-22 10:40
标题: 关于&与&&还有|与||的问题
本帖最后由 hou3172568 于 2011-11-22 12:01 编辑

&和&&有什么区别吗?还有|和||有什么区别吗?一直在用&&和||没用过&和|
作者: 申绪胜    时间: 2011-11-22 11:03
如果是用两个连着的&&  当判断第一个条件为假的时候,
&&后面的就不再判断,因为肯定为假

||同理,当判断出前面的条件为真的时候,
||后面也不再判断,因为无论真假,结果肯定为真

而用一个& 或|判断时,两边的条件都要判断完,才会给出结果,相对慢一点,

另外,用一个|或&还可以表示按位或和按位与运算
作者: 唐柏平    时间: 2011-11-22 11:07
&与&&的区别
   &:无论左边是true还是false,右边都运算
   &&:当左边是false时,右边不运算
   |:两边都运算
   ||:当左边是true时,右边不运算


逻辑与位运算符如何区分。
    如果两边是数值当成位运算符
    如果两边是布尔型当成逻辑运算符
作者: 李晓斌    时间: 2011-11-22 11:08
这个问题很多java教材上都没怎么明确,但是老毕的视频上是讲过的。&表示And(与),&&表示And(短路)。它俩的区别就是:&无论左边是true还是false,右边都要再运算一遍,而&&则不同,当左边为false时,右边就不用运算了。因为我们知道,与的话,要两边都要是true时,总的才会是true,只要有一个是false,那总的就是false,无论后面是true还是false,因此多数情况下都是用&&效率高,很少用&。例如:a&&b,如果a非真,则不再判断b,直接输出表达式为false,若a为真,则再判断b;而a&b,若a非真,即使已经知道最后结果是false,但还是要再判断一下b的情况。

|和||的区别和上面的是类似的,|的话,两边都要运算;||的话,当左边为true,右边就不用运算了。说了那么多,希望lz能够明白。
作者: 肖岑锋    时间: 2011-11-22 11:08
&和&&都可以用作逻辑与的运算符,表示逻辑与,当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==3&& ++y>0)不会增长
&还可以用作位运算符
|和||是一样的道理,&和&&都可以用作逻辑或的运算符,表示逻辑或,当结果只要有一个为True就返回True。
||还具有短路的功能,即如果第一个表达式为true,则不再计算第二个表达式
我记得这个问题好像我回答过一次的?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2