本帖最后由 怀念黑海岸 于 2014-8-5 12:07 编辑
可以简而概之:当我们往一个方法里面传递参数时,如果这个参数是基本数据类型包括String,那么实际上传递进去的只是这个基本数据类型的一个复制品而已,因此在这个方法内对这个参数的操作其实都只是对这个复制品的操作,而这个参数如果是引用类型,即一个对象的话,那么传递进去的是这个对象的引用,那么在这个方法内对这个参数的操作都是操作这个对象本身。例如下面的例子:
class TestSwap{
public static void main(String []args){
int a=1,b=3;
Person p1=new Person("Li");
Person p2=new Person("Du");
System.out.println("Before swap-->"+a+","+b);
swap(a,b);
System.out.println("After swap-->"+a+","+b);
System.out.println("---------------------------");
String str1="abc";
String str2="def";
System.out.println("Before swap-->"+str1+","+str2);
swap(str1,str2);
System.out.println("After swap-->"+str1+","+str2);
System.out.println("---------------------------");
System.out.println("Before swap-->"+p1.name+","+p2.name);
swap(p1,p2);
System.out.println("After swap-->"+p1.name+","+p2.name);
}
public static void swap(String str1,String str2){
System.out.println("Before swap-->"+str1+","+str2);
String temp =str1;
str1=str2;
str2=temp;
System.out.println("After swap-->"+str1+","+str2);
}
public static void swap(int a,int b){ //对于基本数据类型,传入a,b实际上是将a,b复制一份后对复制的a,b进行操作。
System.out.println("Before swap-->"+a+","+b);
int temp =a;
a=b;
b=temp;
System.out.println("After swap-->"+a+","+b);
}
public static void swap(Person p1,Person p2){//对于引用数据类型,传入的引用地址,实际上的操作就是对对象本身的操作
String temp=p1.name;
p1.name=p2.name;
p2.name=temp;
}
}
class Person{
String name;
Person(String name){
this.name =name;
}
}
运行结果:
Before swap-->1,3
Before swap-->1,3
After swap-->3,1
After swap-->1,3
--------------------------
Before swap-->abc,def
Before swap-->abc,def
After swap-->def,abc
After swap-->abc,def
--------------------------
Before swap-->Li,Du
After swap-->Du,Li
|