在日常开发中,对于两个变量我们可能需要进行值的交换,以下是我学习Java过程中见到的三种方式,供大家参考:
1、引入第三个变量t:
public class Test {
public static void main(String[] args) {
int a=1;
int b=2;
int t; //引入第三个变量t
t=a; //将a的值赋给t进行保存
a=b; //将b的值赋给a
b=t; //将t保存的a赋给b
System.out.println("a="+a);
System.out.println("b="+b);
}
}
(此种方法比较容易理解,不会出现数值上的错误,但是会产生一个新的变量t,对内存空间有一定的浪费。)
2、采用加减法变换,做到值的交换,如下:
public class Test {
public static void main(String[] args) {
int a=1;
int b=2;
a=a+b; //此时a=a+b;
b=a-b; //由于a=a+b;所以这一步执行的效果等同 (a+b)-b ,此时b的值为初始的a;
a=a-b; //由于a=a+b;所以这一步执行的效果等同 (a+b)-a ,此时a的值为初始的b;
System.out.println("a="+a);
System.out.println("b="+b);
}
}
(在a的值和b的值加起来超过对应类型的最大值的时候,则会出现越界的问题,进而得出的数据出现错误。所以在数值较大的时候不建议使用。)
3、采用位运算的方式,在异或运算中,一个数异或同一个数两次得到的值不变。(可以参考异或运算的法则)
public class Test {
public static void main(String[] args) {
int a=3;
int b=5;
a=a^b; //此时a的值为a、b的异或集
b=a^b; //由于a=a^b,该处实现的效果等同于a^b^b,可见相当于a异或了b两次,所以得到的结果为a,即b=a
a=a^b; //由于a=a^b,在上一步实现了b=a ,该处实际效果等同于a^b^a,相当于b异或了两次的a,得到的结果为b,即a=b
System.out.println("a="+a);
System.out.println("b="+b);
}
}
(由于该方法采取的是计算机底层的位运算,不会产生新的变量,不会对内存造成额外的开销,运算速度是三种方法种最快的,但和第二种方法一样,可能会出现越界问题,在数字较大时不建议使用。)