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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李东升 中级黑马   /  2012-7-23 10:31  /  2216 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李东升 于 2012-7-23 12:33 编辑

&和&&运算符有什么区别?不是都返回boolean值么?到底怎么用的?

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

10 个回复

倒序浏览
&                两边都为true结果才为true,只要有一边是false,结果就是false


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

另外:
|                两边都为false结果才为false,只要有一边是true,结果就是true
||                和||结果相同,具有短路效果,如果前半是true,表达式结果一定为true,不运行后一半
回复 使用道具 举报
&与&&的特点:
逻辑与&     无论左边是true还是false,右边都参与运算
短路与&&   如果左边是false,右边就不运算

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

最后总结一点:
短路与&&   如果左边是false,右边就不运算
短路或||    当左边为true,右边就不再参与运算
以上是两种情况是反的,所以需要注意下

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
&运算符的两个表达式都要计算,就是说前一个表达式计算为假的话依然会计算后面的表达式。&&称为短路运算符,如果前面表达式计算为假则不会记得第二个表达式了。不知道说的明白不明白
回复 使用道具 举报
本帖最后由 韩爽 于 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

希望可以帮到你

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
&& 逻辑运算符,当第一个条件为假时,第二个条件不做判断,即短路运算符;返回值只有true或者false。
& 位运算符,当第一个条件为假时,跳过,判断第二个条件;返回值是个数
回复 使用道具 举报
&(与) 条件式两遍必须均为真 结果才为真
&&(双与)  如果左边为真,就不判定右边,结果直接为真
回复 使用道具 举报
陈雷 中级黑马 2012-7-23 11:04:44
8#
本帖最后由 陈雷 于 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);
}




回复 使用道具 举报
&和&&都可以用作逻辑与的运算符,表示逻辑与(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技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
逻辑运算符用于连接Boolean类型的表达式
& = 有false就是false,只有两个都为true才为true
| = 有true就是true,只有两个都为false才为false
^ = 两边相同是false,不同是true
! !true = false
&& || ||短路运算符,提高运算效率
回复 使用道具 举报
{:soso_e113:}   我是看别人答案的。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马