黑马程序员技术交流社区

标题: &与&&的区别。 [打印本页]

作者: 李东升    时间: 2012-7-23 10:31
标题: &与&&的区别。
本帖最后由 李东升 于 2012-7-23 12:33 编辑

&和&&运算符有什么区别?不是都返回boolean值么?到底怎么用的?
作者: 王璐    时间: 2012-7-23 10:33
&                两边都为true结果才为true,只要有一边是false,结果就是false


&&                和&结果相同,具有短路效果,如果前半是false,表达式结果一定为false,不运行后一半

另外:
|                两边都为false结果才为false,只要有一边是true,结果就是true
||                和||结果相同,具有短路效果,如果前半是true,表达式结果一定为true,不运行后一半

作者: 金鑫    时间: 2012-7-23 10:38
&与&&的特点:
逻辑与&     无论左边是true还是false,右边都参与运算
短路与&&   如果左边是false,右边就不运算

逻辑或|     表达式两边都参与运算
短路或||    当左边为true,右边就不再参与运算

最后总结一点:
短路与&&   如果左边是false,右边就不运算
短路或||    当左边为true,右边就不再参与运算
以上是两种情况是反的,所以需要注意下
作者: 王贵朝    时间: 2012-7-23 10:39
&运算符的两个表达式都要计算,就是说前一个表达式计算为假的话依然会计算后面的表达式。&&称为短路运算符,如果前面表达式计算为假则不会记得第二个表达式了。不知道说的明白不明白
作者: 韩爽    时间: 2012-7-23 10:41
本帖最后由 韩爽 于 2012-7-23 10:45 编辑

运算符优先级:括号,下标,->.(成员)最高:
单目的比双目的高;
算术双目的比其他双目的高;
位运算 高于 关系运算;
关系运算 高于 按位运算(与,或,异或);
按位运算 高于 逻辑运算;
三目的只有一个 条件运算,低于逻辑运算;
赋值运算仅比
优先级
运算符
结合性
1
() [] .
从左到右
2
! +(正) -(负) ~ ++ --
从右向左
3
* / %
从左向右
4
+(加) -(减)
从左向右
5
<< >> >>>
从左向右
6
< <= > >= instanceof
从左向右
7
== !=
从左向右
8
&(按位与)
从左向右
9
^
从左向右
10
|
从左向右
11
&&
从左向右
12
||
从左向右
13
?:
从右向左
14
= += -= *= /= %= &= |= ^= ~= <<= >>= >>>=
从右向左
&和&&的区别
&和&&都可以用作逻辑与的运算符,表示逻辑与(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类型时,&表示按位与操作a^b,想当然的认为是a的b次方,后来才发现,Java中,要表示a的b次方,Math.pow(a,b),如果是在题目中表示,也不会加上^这个符号,加上了^,a^b就表示是异或运算, a^b<<2,<<优先级比^高,所以, b先左移2位(相当于乘以4)再与a异或(两个值'相同为假,不同为真'),10000^110为22

希望可以帮到你


作者: 李菁    时间: 2012-7-23 10:48
&& 逻辑运算符,当第一个条件为假时,第二个条件不做判断,即短路运算符;返回值只有true或者false。
& 位运算符,当第一个条件为假时,跳过,判断第二个条件;返回值是个数

作者: 张振纲    时间: 2012-7-23 10:53
&(与) 条件式两遍必须均为真 结果才为真
&&(双与)  如果左边为真,就不判定右边,结果直接为真
作者: 陈雷    时间: 2012-7-23 11:04
本帖最后由 陈雷 于 2012-7-23 11:08 编辑



  public static void main(String[] args) {
         int i = 5;
           
    boolean flag1 = (i > 3) && (i < 4);
  // 短路与运算符&&,要求左右两个表达式都为true时才返回true,如果左边第一个表达式为false时
  //它立刻就返回false,省下一些无谓的计算时间。      
   System.out.println(flag1);
         boolean flag2 = (i > 3) & (i > 4);
  // 非短路与运算符&,要求左右两个表达式都为true时才返回true,两个表达式他都会计算
         System.out.println(flag2);
}





作者: 刘海源    时间: 2012-7-23 13: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-7-23 13:45
逻辑运算符用于连接Boolean类型的表达式
& = 有false就是false,只有两个都为true才为true
| = 有true就是true,只有两个都为false才为false
^ = 两边相同是false,不同是true
! !true = false
&& || ||短路运算符,提高运算效率
作者: 郑枫   [̲̅    时间: 2012-7-23 21:51
{:soso_e113:}   我是看别人答案的。。




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