【发布时间】:2012-12-06 19:01:30
【问题描述】:
【问题讨论】:
-
我们又来了:)
标签: java parameter-passing pass-by-reference pass-by-value
【问题讨论】:
标签: java parameter-passing pass-by-reference pass-by-value
它没有。 Java 纯粹是按值传递。处理对象时传递的值是对象引用,但这与“通过引用传递”无关。
按引用传递意味着函数可以传递一个变量并在调用函数中更改该变量的内容。这在 Java 中不存在。
例如:
void foo() {
int a;
a = 42;
bar(a);
System.out.println(a); // Will ALWAYS be 42
}
void bar(int b) {
b = 67;
}
对比C++,确实有传递引用:
// C++ code
void foo() {
int a;
a = 42;
bar(a);
cout << a; // 67?!
}
void bar(int& a) { // <== Note the &
a = 67;
}
Java 没有 C++ 中的 &(或 C# 中的 out / ref)。
您可能正在考虑对象引用,这是对“引用”一词的完全独立使用,而不是传递引用中的“引用”。让我们看一个带有对象的示例:
void foo() {
Object o1, o2;
o1 = new Object();
o2 = o1;
bar(o1);
System.out.println(o1 == o2); // Will ALWAYS be true
}
void bar(Object o) {
o = new Object();
}
如果 Java 有按引用传递(并且我们使用它将对象变量传递给 bar),则 foo 中的 == 将是错误的。但事实并非如此,也没有办法做到这一点。
对象引用允许您更改传递给函数的对象的状态,但您不能更改调用函数中包含它的变量。
【讨论】:
Java 总是“按值传递”。所以原语和 Object 的 (reference) 都是按值传递的。
编辑
是的,对象不是直接传递的,我们总是用它们的引用来引用它们。所以Object的引用是按值传递的。
【讨论】: