- &&:短路与,当&&前面判断为false,后面不再执行(短路)
- 左边为false,运算结果为false。
- 左边为true,同时右边也为true 结果为true
理解:同时为true才为true,短路
- & :与,左右两边都运算(不短路)
- 前后 有一个false则为false
- 前后都为true则为true
理解:同时为true才为true,不短路
- ||:短路或
- 前面true ,结果为true不在判断
- 前面false 后面为false 结果为false。后面为true 结果为true
理解:一个为true就为true,短路
- |:非短路或
- 前后有个true 则为true
- 前后都为false 则为false
理解:一个为true就为true,不短路
栗子:
//正确写法的代码
if((str!=null)&&(!str.equals(""))){
System.out.println("正确代码");
}
如果将&&改为&则会抛出NullPointerException异常,因为&& 短路与,所以不会进行后面的判断所以不会报错
二:按位与的运算符(&)
- 参加运算的两个数据,按二进制位进行“与”运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
即:两位同时为“1”,结果才为“1”,否则为0
例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。
- 负数:按补码形式来算
- 用途:
- (1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
- (2)取一个数中指定位
方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。
例:设X=10101110,
取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;
X的低(后面)四位是1110,对吧。那么X与哪个数按位与运算才能得到这后四位呢??这个数有下面的特征:需要的留下的那些位为1,不需要的那些位为0,即可。我们看下这题。我们需要后四位。那么这个被按位与的数就应该后四位都为1 ,前面四位不要。所以每个位上为0。
于是00001111.与这个数&按位与运算即可得带后四位。
三:按位或的运算符(|)
- 参加运算的两个对象,按二进制位进行“或”运算。运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;
即 :参加运算的两个对象只要有一个为1,其值为1
例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7。
- 负数按补码形式参加按位或运算
- 用途
- 把数据中的某个位的数替换为 1
方法:假设该数为X,替换X数的右边第二个数为1 那么X 就与00000010按位或运算即可 这个数的特点是右边第二位数为 1.其他都为0
网友评论