在有的书上说java参数在传递参数的时候如果不是基本类型则采用传递reference
而有得书上则说都采用传值方式,小弟作了一个程序作了如下测试,结果却让人疑惑:
public class ByValueOrByReference
{
public static void main(String []args)
{
Person p1=new Person("Zhangsan");
Person p2=new Person("Lisi");
swap(p1,p2);
System.out.println("p1 name: "+p1.getName()+"\np2 nam e: "+p2.getName());//p1 name: Zhangsan
//p2 name: Lisi
//象是by value;
changeName(p1,p2);
System.out.println("p1 name: "+p1.getName()+"\np2 name: "+p2.getName());//p1 name: Lisi
//p2 name: Zhangsan
//象是by reference;
}
public static void swap(Person p1,Person p2)
{
Person temp=p1;
p1=p2;
p2=temp;
}
public static void changeName(Person p1,Person p2)
{
p1.setName("Lisi");
p2.setName("Zhangsan");
}
}
class Person
{
private String name;
public Person(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name=name;
}
}