应该还有一个区别。 if (a > b & ++a > b) 如果a>b 为false,那后面的还是要执行的, ++a可以测试。 if (a > b && ++a > b) 而&& 如果a>b为false,那&&后面的语句是不执行的。 比如 int a = 1; int b = 3; if (a > b & ++a > b){} println(a);-------------------- a = 2if (a > b && ++a > b) {} println(a);---------------------- a = 1; 用于逻辑运算符时候, | 和 || 也是一样的区别。不知道我说的对不。
& 它们在两边是布尔类型时称为布尔运算符。 && 称为逻辑运算符。可以这么说,布尔运算符执行的是运算过程,而逻辑运算符执行的是逻辑判断过程。 也正因为如此,布尔运算符得计算两边所有的表达式,而逻辑运算符只是作为逻辑 判断,在 && 判断时,左边为 false 时,就已经得出了判断结果,就不需要再去 计算右边的表达式了,也就是通常所称的“短路”,这是编译器进行代码优化的结果。 而布尔运算符是非短路的,即:不管如何两边的表达式都将计算,可以看看下面代 码输出结果:public class Test1 { public static void main(String[] args) { int m = 5, n = 5; if((m != 5) && (n++ == 5)){} System.out.println("a." + n);
m = n = 5; if((m != 5) & (n++ == 6)){} System.out.println("b." + n);
m = n = 5; if((m == 5) || (n++ == 5)){} System.out.println("c." + n);
m = n = 5; if((m == 5) | (n++ == 6)){} System.out.println("d." + n); } }布尔运算符与等号可以组成布尔赋值运算符,而逻辑运算符不行:boolean b = true; boolean c = false; b &= c;另外,在运算符的优先级别上,布尔运算符的优先级别高于逻辑运算符。
false && true 的结果是false
2.& 与运 算 符
位 运 算 符 用 来 对 二 进 制 位 进 行 操 作 ,
参 与 运 算 的 两 个 值 ,如 果 两 个 相 应 位 都 为 1,则 该 位 的 结 果 为 1,否 则 为 0。 即 : 0 & 0 = 0,0 &1 = 0,1 & 0 = 0,1 & 1 = 1
&运算与,第一个为假时,也予以第二个表达式的预算,但是结果还是假。
&操作数是二进制的数位0和1,返回值是0/1.
if (a > b & ++a > b) 如果a>b 为false,那后面的还是要执行的, ++a可以测试。
if (a > b && ++a > b) 而&& 如果a>b为false,那&&后面的语句是不执行的。
比如
int a = 1;
int b = 3;
if (a > b & ++a > b){}
println(a);-------------------- a = 2if (a > b && ++a > b) {}
println(a);---------------------- a = 1;
用于逻辑运算符时候, | 和 || 也是一样的区别。不知道我说的对不。
&& 称为逻辑运算符。可以这么说,布尔运算符执行的是运算过程,而逻辑运算符执行的是逻辑判断过程。
也正因为如此,布尔运算符得计算两边所有的表达式,而逻辑运算符只是作为逻辑
判断,在 && 判断时,左边为 false 时,就已经得出了判断结果,就不需要再去
计算右边的表达式了,也就是通常所称的“短路”,这是编译器进行代码优化的结果。
而布尔运算符是非短路的,即:不管如何两边的表达式都将计算,可以看看下面代
码输出结果:public class Test1 {
public static void main(String[] args) {
int m = 5, n = 5;
if((m != 5) && (n++ == 5)){}
System.out.println("a." + n);
m = n = 5;
if((m != 5) & (n++ == 6)){}
System.out.println("b." + n);
m = n = 5;
if((m == 5) || (n++ == 5)){}
System.out.println("c." + n);
m = n = 5;
if((m == 5) | (n++ == 6)){}
System.out.println("d." + n);
}
}布尔运算符与等号可以组成布尔赋值运算符,而逻辑运算符不行:boolean b = true;
boolean c = false;
b &= c;另外,在运算符的优先级别上,布尔运算符的优先级别高于逻辑运算符。
&&和||是按照“短路”方式求值的。如果第一个操作数已经能确定值,第二个操作数就不必计算了。&和|属于位运算符。
&和|应用于布尔值时,得到的结果也是布尔值,这时它与&&和||非常相似,只是不按短路方式进行计算。
严格来说不应该算是区别,那个&是按位逻辑与运算,即它左右两边的操作数在内存里的存储位将沿对应位依次进行逻辑与运算,返回不一定是boolean型。
&&的操作数必须为boolean型并且它自己也返回boolean型。
& 即使第一个为假,第二个表达式也要进行运算
&&逻辑运算&&短路
在value1就可以得出运算结果的时候,将不会再去参照value2而直接返回结果。
value1 & value2
在value1就可以得出运算结果的时候,仍会去参照value2而后返回结果。
例如下面的代码使用&&可以正常运行而使用&后就会跑出NullPointerException意外
String str = null;//正常运行
if(false && str.equals("a")){
System.out.println(str);
}//抛出意外
if(false & str.equals("a")){
System.out.println(str);
}
&&逻辑运算
&是为运算符,现将运算符两边的数字转化成二进制,在分别对两个数的对应为进行与操作,在京最后得到的运算结果的二进制数转换回十进制即可.不知道有没有讲清楚.