短路与和逻辑与
- 基本规则
短路与&& 条件1&&条件2 两个条件都为true,结果为true,否则为false
逻辑与& 条件1&条件2 两个条件都为true,结果为true,否则为false
- 区别
- 短路与&&:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
- &逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
- 短路或||:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
- |逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低
//区别
// int a = 4;
// int b = 9;
// if (a < 1 && ++b < 50) {
// System.out.println("ok3");
// }
// System.out.println("a="+ a +"b=" + b);
//
// if (a < 1 & ++b < 50) {
// System.out.println("ok4");
// }
// System.out.println("a="+ a +"b=" + b);
//对于短路与第一个条件为false,后面的条件不在执行和判断
//对于逻辑与第一个条件为false,后面的条件会继续执行和判断
//(1)||短路或:如果第一个条件为true
//则第二个条件不会判断,最终结果为true,效率高
//(2)|逻辑或:不管第一个条件是否为true
//第二个条件都要执行
// int a = 4;
// int b = 9;
// if( a > 1 || ++b > 4) {
// System.out.println("ok4");
// }
// System.out.println("a=" + a + "b=" + b);
//
// if( a > 1 | ++b > 4) {
// System.out.println("ok5");
// }
// System.out.println("a=" + a + "b=" + b);
- 异或^
a^b 当结果a和b不同时,结果为true,否则为false
补充应用:
- 将两个变量的值进行交换
int a =1;
int b = 2;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println(a);//2
System.out.println(b);//1
2.寻找出现一次的数(时间复杂度为O(n))
int[] a = {2, 3, 3, 4, 4, 6, 7, 7};
int l = a.length;
int eor=0;
int i;
for(i=0;i<l;i++)
{
eor^=a[i];
}
int rightone=eor&(~eor+1);//提取最右侧的1
int onlyone=0;//eor'
int cur;
for(i=0;i<l;i++){
cur=a[i];
if((cur&rightone)==0){
onlyone^=cur;
}
}
System.out.println(onlyone);
System.out.println(onlyone^eor);
若文章内容错误,希望大家帮忙指正