直接看两段测试代码,基本就能证明Java值传递而不是引用传递了。

因为在C++代码中很明显的如果是值传递,那么返回的Dog的名字仍然是“feng”
而如果是引用传递的时候,返回的将是“tao”

而Java中返回的是“feng”,显然Java值传递

C++:

#include <iostream>
using namespace std;

class Dog {
public:
    string name = "";
    Dog(string name) {
        this->name = name;
    }
};

void foo(Dog *d) {  // 值传递
    d = new Dog("tao");
}

void bar(Dog *&d) { // 引用传递
    d = new Dog("tao");
}

int main() {
    Dog *d = new Dog("feng");

    foo(d);
    cout << d->name << endl; // 打印出 "feng"

    bar(d);
    cout << d->name << endl; // 打印出 "tao"

    getchar();
}

Java

class Dog {
    String name = "";
    Dog(String name) {
        this.name = name;
    }
}

public class Test { // java passes value
    static void foo(Dog d) {
        d = new Dog("tao");
    }

    public static void main(String[] args) {
        Dog d = new Dog("feng");

        foo(d);

        // 如果Java传递值将会打印“feng”
        // 如果Java传递引用将会打印“tao”
        System.out.println(d.name); // 打印出“feng”,所以是值传递
    }
}
Comments
Write a Comment