目录
前言:
1.利用数组进行交换
2.利用对象的引用进行交换
总结:
前言:
总所周知,我们在学C语言指针的时候,老师总是会先让我们写一个交换两个数的swap函数,从而引起对指针的讲解。但是在java里面没有指针,那么我们如何实现两个数的交换呢?下面给大家介绍两种方法.
1.利用数组进行交换用数组进行交换,就是要把你想要交换的两个数放到一个数组中,然后利用中间变量,对数组中的两个值进行交换。这个方法比较简单,直接看代码:
public static void swap(int[] arr){
int temp =arr[0];
arr[0] =arr[1];
arr[1] = temp;
}
public static void main(String[] args) {
int[] arr = {2,7};
System.out.println(arr[0]+" "+arr[1]);
swap(arr);
System.out.println(arr[0]+" "+arr[1]);
}
向上面的代码,我想要交换2和7,那么我就把2和7放到了一个数组中,然后利用temp这个中间变量进行交换。运行的结果就是:2 7 和 7 2
当然我想这个方法不是你想过要的,那么我们来看一下第二个方法。
2.利用对象的引用进行交换先给大家看一下代码,看完代码再画图解释:
class Value{
int n;
}
public class TEST {
public static void swap(Value myval1,Value myval2){
int temp = myval1.n;
myval1.n = myval2.n;
myval2.n = temp;
}
public static void main(String[] args) {
Value val1 = new Value();
val1.n = 2;
Value val2 = new Value();
val2.n = 7;
System.out.println(val1.n+" "+ val2.n);
swap(val1,val2);
System.out.println(val1.n+" "+ val2.n);
}
}
接下来我们来详细解析一下这段代码,看下图:
我们假设再引用创建val1 val2和时候 是在栈区开辟空间了的,地址在堆区 假设val1地址为0x00ff36 val2的地址为0x00ff36 ,那么在栈区开辟的空间是指向堆区的 地址就是0x00ff36和0x00ff36 红色的部分是调用swap函数时开辟的区域,实参传给形参 他们的地址就是相同 指向同一个堆区 后面也是借用temp中间变量实现两个数的交换,也就是蓝色的部分,不改变地址,只改变值。
总结:如果交换的两个数是局部变量,那么就没办法交换,因为栈上面的地址是无法获取的,没有指针这样的获得地址的东西,那么我们只能将想要交换的数据想办法放到堆上。这样才能进行交换。



