交换两个变量的值,如果是基础类型比如int, 直接进行交换:
int aToSwap = 1; int bToSwap = 2;
一个经典的问题就是如果我有一个swap 方法如下,试问在主函数里调用了这个swap 方法以后 ,从主函数里传入的两个变量值交换了没有?
public void swap(int a, int b){
int temp = a;
a=b;
b=temp
}
答案是没有,我们知道C++里面有指针的概念,而java没有这个概念,那么如何理解这里的交换呢:
1. 主函数运行时,jvm会在堆内存创建两个int 型的值1和2
2. 然后在栈内存创建两个变量名 aToSwap 和 bToSwap 指向堆内存的1 和 2
3. 调用swap 的时候,会在栈内存创建两个临时变量a、b 分别指向堆内存的1和2,
4. swap 函数执行,临时变量a、b的值发生了交换
5, swap函数调用完毕,从栈中释放a、b
6.主函数显示aToSwap 、bToSwap 值并没有交换。
那如果用swap 函数交换的是两个对象呢?
其实答案是一样的,因为swap 调用的时候, 都会创建临时变量,swap函数调用完后,临时变量都会被交换然后释放,真正要交换的两个变量并没有被交换。
这个问题主要就涉及的就是函数调用,已经变量在堆栈中的创建。