java 数值交换
YeBin 2017-12-15 tag1
# java 两个数值交换
在写这篇文章之前,我一直以为java进行数值交换与c是一样的,传递引用类型即可,但其实在java中无论是值传递还是引用传递都只是将实参拷贝一份,在方法里修改的实际是实参的副本。下面我们来举个例子:
public static void swap(int a,int b)
{
int temp=a;
a=b;
b=a;
}
public static void main(String [] args){
int a=1;
int b=2;
swap(a,b);
System.out.println("a="+a); //a=1
System.out.println("b="+b);//b=2
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
这段代码相信很多人都明白,基本类型是值传递,形参的值的改变不会影响实参.那么很多人就会立刻想到传递引用类型Integer,但传递Integer真的能做到吗?
public static void swap(Integer a,Integer b)
{
int temp=a;
a=b;
b=a;
}
public static void main(String [] args){
Integer a=1;
Integer b=2;
swap(a,b);
System.out.println("a="+a);//a=1
System.out.println("b="+b);//b=2
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
这里就有人很奇怪,为什么这样还是没有把两个值交换呢?其实我刚才说过,java里的传参是根据实参拷贝过来的,也就是说形参是实参的一个副本,swap方法里只对a,b的副本做了交换,而a,b没有改变,故两者的值没有交换