在学习新的编程语言时,您可能遇到的一个可能的障碍是,默认情况下,该语言是按值传递还是按引用传递.
所以这是我对你们所有人的问题,用你最喜欢的语言,它是如何实际完成的?什么是可能的陷阱?
language-agnostic oop parameters pass-by-reference pass-by-value
我已经检查了维基百科,然后用Google搜索,但我还是无法理解ALGOL 60中的名称传递方式.
我对以下内容感到困惑:
在C++中,我们可以通过引用将参数传递给函数(将其声明为指针或引用变量),如果我们在函数内部修改它,则当函数返回时,更改会反映给调用者.
这不是在java中发生的,我不确定我理解为什么.
例如,这是来自对象X的方法
public boolean aMethod(int id, myClass aClass)
{
//do some logic
aClass = new MyClass();
//configure argument object aClass
return true;
}
Run Code Online (Sandbox Code Playgroud)
在调用代码中:
//some code processing
myClass obj = null;
if(X.aMethod(2,obj))
{
obj.methodA();//start using the object
}
Run Code Online (Sandbox Code Playgroud)
我在C++中使用它,即返回一个通知可以使用函数参数的结果,但在java中这不起作用.
我输入if(X.aMethod(2,obj))分支,但obj为null.为什么它为空?
我没有在方法aMethod(int id,myClass aClass)中使用new分配堆中的内存地址吗?我没有在函数中传递obj的"地址"吗?我期望在调用代码中正确构造和使用obj.我误解了java中的内存吗?
java ×2
algol ×1
c++ ×1
function ×1
history ×1
methods ×1
oop ×1
parameters ×1
pass-by-name ×1