黑马程序员技术交流社区
标题:
&和&&的用法
[打印本页]
作者:
Ja2362
时间:
2014-3-27 18:35
标题:
&和&&的用法
初学java,&和&&总是分不清楚怎么使用,有区别吗?
作者:
H-Deka
时间:
2014-3-27 18:36
&和&&都可以用作逻辑与的运算符, 表示逻辑与 (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。
作者:
阳春烟景
时间:
2014-3-27 18:43
&和&&都可以用作逻辑与的运算符,表示逻辑与(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
/**
*逻辑运算符**和位运算符*的区别和共同点
*
*/
public class LogicCharacter {
public static void main(String[] args) {
int a=1,b=2;
//-----------&&和&都有逻辑运算符AND的功能
if(a==1&&b==2)
{
System.out.println("ok1");
}
if(a==1&b==2)
{
System.out.println("ok2");
}
//-----------&&具有短路的功能
String str=null;
if(str!=null&&str.equals(""))
{
System.out.println("ok3");
}
if(str!=null&str.equals(""))
{
System.out.println("ok4");
}
//----------&按位的处理
System.out.println(0x31 & 0x0f);
}
}
复制代码
作者:
Ranger
时间:
2014-3-27 18:47
a&b 在执行的时候会判定a和b同时为true时返回true,如果a或b有一个为false就返回false,a和b都执行
a&&b 如果a为true才会执行b如果b也为true,则返回true,如果a为false,则直接返回false,不执行b语句
作者:
xuehuayous
时间:
2014-3-27 19:12
"&"逻辑与 a&b a.b都参与判断;
"&&"短路与a&&b,如果a为flase则不判断b,为false。
package cn.itcast;
public class Test{
public static void main(String args[]) {
boolean a = false;
boolean b = true;
boolean c = a & b; //"&"逻辑与
boolean d = a && b;//"&&"短路与
System.out.println(c);
System.out.println(d);
}
}
复制代码
作者:
橡皮-leo
时间:
2014-3-27 19:30
&位于运算符从左到右,在进制数转换的时候经常用到,&&逻辑运算符and,且的意思啊。用于逻辑判断if(a==0&&b==0)也就是两个都为真.
作者:
李庆忠
时间:
2014-3-27 21:15
本帖最后由 李庆忠 于 2014-3-27 21:22 编辑
&:无论左边真假,两边都有判断:&&:只要左边为假,右边就不用判断了。比如;: int x = 3; if (x>5&x<1)// 因为只有一个&,虽然左边为假,右边也要判断。
而:
if(x>5&&x<1)//左边判断完x>5为假,右边就不需要判断了,这样可以提供代码效率
作者:
心?=忐§忑]
时间:
2014-3-27 22:19
有啊,都是逻辑运算符,不同点是:
a&b: a如果成立了,b也需要运算的。
a&&b: a如果成立了,那么,b就不会运算了。
实例:
public class Test2{
public static void main(String[] args){
int i=3;
if((i++>5)&(i++<9)){
System.out.println(i);
System.out.println("恭喜,执行完了条件语句!");
}
System.out.println(i);
}
}
结果是: 5
public class Test2{
public static void main(String[] args){
int i=3;
if((i++>5)&&(i++<9)){
System.out.println(i);
System.out.println("恭喜,执行完了条件语句!");
}
System.out.println(i);
}
}
结果是: 4
作者:
海世山盟
时间:
2014-3-27 23:07
&是位运算符,例如 3&2 。在计算机中数据是以二进制形式存在的 1:0000 0011 2: 0000 0010 当运算1&2时,相同位数都为一时,该位的计算结果为1,否则为0;故3&2后 变成了0000 0010.也就是十进制的2了。
&&是一个短路运算符。a&&b 既是当条件a和条件b同时为真时,整个a&&b结果为真,否则a&&b的结果为假。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2