此问题已在此处找到答案:
java是“按引用传递”还是“按值传递”((89个答案)
昨天关门了。
有人能解释一下这段代码吗。输出是我感到困惑的地方。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);
}
}
为什么输出以下内容?i、 str仍然是酒吧,但是person.a现在45岁了?
bar
Person [a=45]
1条答案
按热度按时间w7t8yxp51#
你可以看到这条线索来了解原因
String
值不会更改,如何使其更改:在java中通过引用传递字符串?