我们只通过代码来直接解释:
看似很长其实内容很简单:
下面我们对数值交换,数组交换进行,字符串交换,一一讲解
//定义n,m并赋值。然后调用方法来进行交换
int n =10;
int m =20;
exchange(n, m);
System.out.println(n);
System.out.println(m);
由于java的递都是数值传递。所以这次交换完之后:n = 10;m = 20;
这是因为在交换的时候是数值交换,先将数值传给方法里面的a,b;然后a,b之间在新的一块区域进行交换,交换完之后方法收回,a与b之间的运算也就收回了,而对于n,m没有一点的影响。所以输出的还是原来的数。
下面定义的数组:
int [] i= {1,3};
int [] j= {2,4};
exchange(i,j);
System.out.println(Arrays.toString(i));
System.out.println(Arrays.toString(j));
exchange1(i, j);
System.out.println(Arrays.toString(i));
System.out.println(Arrays.toString(j));
对于第一次输出数组和上面一样,java的传递时值 传递,所以,输出的还是原来。
而对于第二次输出,由于java是直传递,a与b里面的指向的是i,j,这时候进行交换,这时候交换的就是i,j,而不是单纯的a,b,所以这次交换完的就是2,3;1,4
下面定义的是字符串的交换:
String s1 = "123";
String s2 = "456";
exchange(s1,s2);
System.out.println(s1);
System.out.println(s2);
这个交换也和第一个一样,通过调用exchange方法来进行交换,先将s1,s2里面的值传给a,b,然后进行交换,此次交换完之后方法回收,a,b作用后的运算都会消失,与s1,s2没有关系,所以还是输出的原来的值。
下面定义了个用户:
User u1=new User();
u1.name="张三";
User u2=new User();
u2.name="李四";
exchange(u1, u2);
System.out.println(u1.name);
System.out.println(u2.name);
exchange1(u1, u2);
System.out.println(u1.name);
System.out.println(u2.name);
这个第一个交换和第一个一样,没有变话,而第二个a,b调用了name,这样指针指的就是u1,u2。而交换完之后方法回收,这时候a,b就没了,而u1,u2发生了变化,所以交换的就是u1,u2的值了。
下面定义了一些数方法来实现交换:
public static void exchange(int a ,int b) {
int temp=a;
a=b;
b=temp;
}
public static void exchange(int []a, int [] b) {
int []temp=a;
a=b;
b=temp;
}
public static void exchange1(int []a, int [] b) {
int temp=a[0];
a[0]=b[0];
b[0]=temp;
}
public static void exchange(String a,String b) {
String temp=a;
a=b;
b=temp;
}
public static void exchange(User a,User b) {
User temp=a;
a=b;
b=temp;
}
public static void exchange1(User a,User b) {
String temp=a.name;
a.name=b.name;
b.name=temp;
}