忘掉它吧,硬套C++的概念没有任何意义。C++中提出引用传递是为了更好的表达自己传递的是参数地址还是具体参数,而Java中根本不支持 & 符号也即是无法传递参数地址,按照概念,毫无疑问Java都是值传递。 概念的出现不应该是帮助我们更好的厘清问题嘛,讨论这种问题意义似乎并不是太大。
下面是百科的定义:
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
在C++中,函数参数的传递方式有引用传递。所谓引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
但是,理解实际的运行机制还是非常有必要的:
在JVM解析阶段:
1.基本数据类型,会将数据直接拷贝一份到被调用栈中,并将地址赋给参数变量
2.引用数据类型(与地址相关的数据类型),也会直接拷贝一份到被调用栈中,并将地址赋给参数变量
JAVA中,当我们更改基本数据类型变量的值或者引用数据类型变量的值时,我们都是改变的当前栈中拷贝数据地址中的值。
划重点:其实变量在解析后都是不存在的,他们都会被替换为实际类型地址,只是让我们记忆地址太难了。
其实,无论值传递还是引用传递都会在被调用栈中开辟一块地址,存储参数数据
对于C++的引用传递呢? 其实也差不多,只不过在被调用栈中分配了一块当前类型的地址类型的空间,并将调用栈中数据的地址存储在这块空间中。 (注意,不是值,而是地址。)。
这时,我们可以通过操作调用栈中数据的地址,来更改调用栈地址中的数据。
害,该学学画图了!
============================================================
|| 我是小布,小布又作小步的意思,哪怕小步前行,也希望自己一直坚持下去!||
============================================================