Gei*_*ond 1 java parameter-passing pass-by-reference pass-by-value
可能重复:
Java是"传递引用"吗?
也许我错过了一些东西......但是我无法理解为什么Java同时使用pass-by-value和pass-by-reference.为什么不只使用一种范式?
它没有.Java纯粹是按值传递.处理对象时传递的值是对象引用,但这与"按引用传递" 无关.
Pass-by-reference意味着函数可以传递给变量并在调用函数中更改该变量的内容.这在Java中不存在.
例如:
void foo() {
int a;
a = 42;
bar(a);
System.out.println(a); // Will ALWAYS be 42
}
void bar(int b) {
b = 67;
}
Run Code Online (Sandbox Code Playgroud)
与C++形成对比,C++ 确实具有传递参考:
// C++ code
void foo() {
int a;
a = 42;
bar(a);
cout << a; // 67?!
}
void bar(int& a) { // <== Note the &
a = 67;
}
Run Code Online (Sandbox Code Playgroud)
Java与&C++(或out/ refC#)中没有相同的东西.
您可能正在考虑对象引用,它是"引用"一词的完全单独使用,而不是引用传递中的"引用".让我们看一下对象的示例:
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();
}
Run Code Online (Sandbox Code Playgroud)
如果Java有引用传递(并且我们用它来传递对象变量bar),则==in foo将为false.但事实并非如此,而且没有办法实现这一目标.
对象引用允许您更改传递给函数的对象的状态,但不能更改调用函数中包含它的变量.
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |