【发布时间】:2012-01-05 15:26:08
【问题描述】:
我有以下代码
一个可变的 Person 类、String 和一个修改 String 和 Person 实例的方法
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);
}
}
输出符合预期。它打印
bar
Person [a=45]
现在,我的问题是
你说 str="foo" 的地方发生了什么?
首先我们假设 s='bar' 并且数据驻留在 0x100 内存中
现在字符串的引用被传递给另一个方法,另一个方法尝试使用 s="foo" 将内存位置 (0x100) 的内容更改为 'foo'。这是正在发生的事情,还是“foo”是在不同的内存位置创建的?
java 是否按值传递引用?
【问题讨论】:
标签: java parameter-passing terminology pass-by-reference pass-by-value