Java名称交换

时间:2015-01-08 05:03:34

标签: java

我认为我有一些非常简单的事情,我并不完全理解。我有一些代码可以切换两个对象的名称:

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);仍然输出保罗约翰不会是约翰保罗而不是?我错过了一些基本的东西,还是我是白痴?

1 个答案:

答案 0 :(得分:1)

如果仔细考虑一下,您会发现swap(person1,person2);提供与swap(person2,person1);完全相同的最终结果是完全合乎逻辑且正确的。在任何一种情况下,无论订单如何,person1都会使用person2的名称,而person2会使用person1的名称。