函数参数部分中的引用


有人能解释一下这段代码吗。输出是我感到困惑的地方。modifyObject函数似乎只修改了一个东西(即p(,但其他东西(即s(保持不变。但我很困惑。有人能解释一下发生了什么吗?
class Person{
int a = 8;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
@Override
public String toString() {
return "Person [a=" + a + "]";
}
}
public class TestMutable {
public static void main(String[] args)
{
Person p = new Person();
p.setA(34);

String s = "bar";
modifyObject(s, p);   //Call to modify objects
System.out.println(s);
System.out.println(p);
}

private static void modifyObject(String str, Person p)
{
str = "foo";
p.setA(45);
}
}

为什么输出以下内容?即str仍然是bar,而是person。A现在45岁了?

bar
Person [a=45]

您可以看到这个线程来了解String值为什么不更改,以及如何更改它:在Java中通过引用传递字符串?

最新更新