&和&&的区别
- &可以作为逻辑运算和位运算,&&只可以作为逻辑运算
- 当两个符号都作为逻辑运算使用时,区别如下:
&逻辑与当前后两值都为true,结果为true
&&短路与正常情况下和逻辑与执行方式一样,当执行过程中第 一个为false时,发生短路,直接得到最终结果false
变量a和b交换的三种方法
1. 利用第三个空间c进行交换
public class Test{
public static void main(String[] args){
int a = 1;
int b = 2;
int c = a;//1
a = b;//2
b = c;//1
System.out.println(a);//2
System.out.println(b);//1
}
}
缺点:开辟了第三个空间c
2. 利用两变量之和进行交换
public class Test{
public static void main(String[] args){
int a = 1;
int b = 2;
a = a + b;//将a+b的和赋值给a,此时a为3
b = a - b;//将a+b的和减去原来的b,得到的结果为原来的a,此时b为1
a = a - b;//2
System.out.println(a);//2
System.out.println(b);//1
}
}
优点:节省了一个内存空间
缺点:两数相加容易产生越界
3. 利用a^(异或)两次b为a本身
public class Test{
public static void main(String[] args){
int a = 1;
int b = 2;
a = a ^ b;//001 1
//010 2
//011 3
//1^2^2=1 一个数字异或同一个数字两次,值不变,a==异或中间值,b==2
b = a ^ b;//a==异或中间值,b==1
a = a ^ b;//2
System.out.println(a);//2
System.out.println(b);//1
}
}
优点:节省内存空间,不会产生越界
最有效率的方式计算2*8
2<<3相当于2*2的3次幂
00000010左位移3为:00010000=16