我认为我有一些非常简单的事情,我并不完全理解。我有一些代码可以切换两个对象的名称:
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) {
System.out.println("Method Arguments: " + p1.getName() + ":"
+ p2.getName());
String temp = p1.getName();
p1.setName(p2.getName());
p2.setName(temp);
System.out.println("Method: " + p1.getName() + ":" + p2.getName());
}
public static void main(String args[]) {
Person person1 = new Person("John");
Person person2 = new Person("Paul");
System.out.println("Before: " + person1.getName() + ":"
+ person2.getName());// will output John : Paul
swap(person2, person1);// will output John : Paul
System.out.println("After: " + person1.getName() + ":"
+ person2.getName());// will output Paul : John
}
}
这在使用参数swap(person1,person2); outputs Paul John
时可以正常工作,但它不应该以相反的方式工作吗? swap(person2,person1);
仍然输出保罗约翰不会是约翰保罗而不是?我错过了一些基本的东西,还是我是白痴?
答案 0 :(得分:1)
如果仔细考虑一下,您会发现swap(person1,person2);
提供与swap(person2,person1);
完全相同的最终结果是完全合乎逻辑且正确的。在任何一种情况下,无论订单如何,person1
都会使用person2
的名称,而person2
会使用person1
的名称。