&&逻辑与 ||逻辑或 它们都是逻辑运算符
& 按位与 | 按位或 它们都是位运算符
if (a == 1 && b == 2) // 这是说既要满足a=1也要满足b=2
if (a == 1 || b == 2) // 这是说或者满足a=1或者要满足b=2
&&逻辑与 也叫做短路与 因为只要当前项为假,它就不往后判断了,直接认为表达式为假
||逻辑或 也叫做短路或 因为只要当前项为真,它也不往后判断了,直接认为表达式为真
package com.ghw.test;
public class Derived {
public static void main(String[] args) {
String s = null;
int a = 1;
// System.out.println(s != null && a++ == 1); // &&有短路功能,a的值还是1 false 1
// System.out.println(a);
//
// System.out.println(s != null & a++ == 1); // &没有短路功能,a的值是2 false 2
// System.out.println(a);
//
// System.out.println(s == null || a++ == 1); // ||有短路功能,a的值是1 true 1
// System.out.println(a);
//
// System.out.println(s == null | a++ == 1); // |没有短路功能,a的值是2 true 2
// System.out.println(a);
System.out.println(s != null && s.equals(""));
}
}
&&还具有短路的功能,即如果第一个表达式为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。
网友评论