很多人都问过Java是“传递引用”还是“按值传递”,但我觉得我还没有很好地解释Java如何实际存储引用以及它如何解释它们的时候调用。
有人能够解释当你有类似的事情时会发生什么,比如
public class Foo {
public static void main(String a[]){
Object a = new Object();
Object b = a;
Object c = b;
bar(c);
}
public static void bar(Object obj) {
obj = new Object();
System.out.println(obj);
}
}
就指针而言?
JVM如何实际引用和取消引用对象和引用?
我猜它在语义上等同于半伪C ++代码:
int main() {
Object *a = new Object;
Object *b = a;
Object *c = b;
bar(c);
return 0;
}
void bar(Object *tempObj) {
tempObj = new Object;
//changes address of a copy of the ptr arg
cout << std::to_string(*tempObj) << endl;
}
(我知道C ++中没有Object
类,并且没有为每个类定义to_string
,就像在Java中一样,但为了示例,我认为它有助于说明这个概念。)
我说错了吗?一句话:引擎盖下发生了什么?我想要一个更明确的答案。