直接看两段测试代码,基本就能证明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