可能有些同学面试的时候会遇到一个面试题:
java如何实现两个变量值交换不使用第三个变量?
我们看见交换两个变量的值首先会想到用一个变量来接收,如下:
public class Test01 {
public static void main(String[] args) {
int c = 1;
int d = 2;
int temp ;
temp = c;
c = d;
d = temp;
System.out.println(c);//输出2
System.out.println(d);//输出1
}
}
这样就完成了一个交换两个变量值的操作,但是问题来了,题目要求不使用第三个变量,那该如何去写呢?
首先我们可以先用加减法来进行交换,如下:
public class Test01 {
public static void main(String[] args) {
int c = 1;
int d = 2;
c = c+d; //c = 3
d = c-d; //d = 1
c = c-d; //c = 2
System.out.println(c);
System.out.println(d);
}
}
可以看到我们使用了加减法来完成了不使用第三个变量来进行交换值的操作,那么还有没有其他办法呢?
我们可以使用异或来解决,如果不明白关于位运算的,这几天会更新一篇位运算的文章
public class Test01 {
public static void main(String[] args) {
//使用异或来解决不使用第三个变量来交换两个变量的值的操作
int a = 3;
int b = 4;
System.out.println("交换前的a的值:"+a);
System.out.println("交换前的b的值:"+b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("交换后的a的值:"+a);
System.out.println("交换后的b的值:"+b);
}
}
三种方法都比较简单,就不多解释其中的原理了,关于位运算会在最近更新一篇详细介绍,有错误期待大佬指出,谢谢