用Java重新分配对象引用

时间:2015-05-29 03:40:24

标签: java object reference

我只想澄清一些事情。为什么person1和person2仍然引用同一个对象?

class Person{
private String name;
Person(String newName) {
name = newName;
}
public String getName() {
return name;
}
public void setName(String val) {
name = val;
}
}

class Test {
public static void swap(Person p1, Person p2) {
Person temp = p1;
p1 = p2;
p2 = temp;
}
public static void main(String args[]) {
Person person1 = new Person("John");
Person person2 = new Person("Paul");
System.out.println(person1.getName()+ ":" + person2.getName());

swap(person1, person2);

System.out.println(person1.getName()+ ":" + person2.getName());

}
}

输出将是:

John:Paul
John:Paul

我想知道为什么约翰和保罗不交换?

1 个答案:

答案 0 :(得分:0)

Java不是通过引用传递的。

这意味着你无法在方法中交换调用者范围内变量的内容。

您所做的一切就是在p1方法内部交换本地变量p2swap的内容。这对main中的变量没有影响。

请注意,此“问题”仅存在于(本地)变量中。当然,您可以交换对象的实例字段,并且对于恰好引用同一对象实例的任何其他人都可以看到该字段。