我正在进行Java测验并遇到了这个问题:
class Person {
static int pid;
int age;
String name;
Person(String s, int i) {
++pid;
name = s;
age = i;
}
}
class Test {
public static void main(String args[]) {
Person p1 = new Person("John", 22);
Test te = new Test();
Person p2 = te.change(p1);
System.out.println(p2.pid + " " + p2.name + " " + p2.age);
System.out.print(p1.pid + " " + p1.name + " " + p1.age);
}
private Person change(Object o) {
Person p2 = (Person) o;
p2.age = 25;
return p2;
}
}
答案结果是1 John 25
打印了两次,但我对这是怎么回事感到困惑。对象p1
的引用值被发送到方法change
,但内容似乎被复制到名为p2
的新对象中。那么p1
实际修改在哪里?
答案 0 :(得分:2)
Person p1 = new Person("John", 22);
Person p2 = te.change(p1);
现在p1
有自己的字段:
p1.age
为22,p1.name
为John
。
* static
变量pid
在所有对象之间共享,在此示例中我们并不关心它
现在您在change
上致电p2
,让我们看看发生了什么:
您按值传递对象p1
,它是引用。您将age
更改为25,因此原始对象将被更改。现在p1
将age
属性设置为25.
最后是return p2;
,它将被分配到p2
中的main
。