有人可以通过指针和引用来解释Java中的引用吗?

时间:2015-03-11 14:46:57

标签: java c++

很多人都问过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中一样,但为了示例,我认为它有助于说明这个概念。)

我说错了吗?一句话:引擎盖下发生了什么?我想要一个更明确的答案。

0 个答案:

没有答案