gpt4 book ai didi

java - 这段代码如何修改传入的对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:22:41 26 4
gpt4 key购买 nike

我在做 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;
}
}

答案原来是 约翰一书 25 打印了两次,但我很困惑这是怎么发生的。对象 p1 的引用值被发送到方法 change 中,但内容似乎被复制到一个名为 p2 的新对象中。那么p1到底修改在哪里呢?

最佳答案

Person p1 = new Person("John", 22);
Person p2 = te.change(p1);

现在 p1 有了自己的字段:

p1.age 是 22,p1.nameJohn

* static 变量 pid 在所有对象之间共享,在这个例子中我们并不关心它

现在您在 p2 上调用 change,让我们看看发生了什么:

您按值传递对象 p1,它是一个引用。您将 age 更改为 25,因此原始对象将被更改。现在 p1age 属性设置为 25。

最后你return p2;,它会被分配给main中的p2

关于java - 这段代码如何修改传入的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26978397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com