值传递和引用传递
值传递(pass by value)
是指在调用函数时将实际参数**复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
引用传递(pass by reference)
是指在调用函数时将实际参数的地址==直接==传递到函数中,那么在函数中对==参数==所进行的修改,将影响到实际参数。
以下是口述
错误混淆点
其实很多人都会有误区都认为传递的参数如果是普通类型,那就是值传递,如果是对象,那就是引用传递,
并不是这样的,其实如果把值传递和引用传递放在C语言中
,那就地址传递
,其实Java也是可以这样理解的, 传递也是地址值,
- 在调用函数的时候,他会把
实际参数的地址值拷贝一份传递到函数中
,如果这个地址的实际参数是在栈中
的话,他会直接拷贝值
,所以函数内部对参数进行操作是不会对实际参数产生影响的 - 如果拷贝的原值
在堆中
的地址,他会根据该地址值去堆中找对应的对象
,再进行操作,所以测函数内对值的操作是影响实际参数的.
结论
其实不管是值传递还是引用传递,其实都是一种求值策略
, 在求值策略中, 叫做按共享传递
, 所以简单点的来说, java的传递是值传递
,而这个值是地址值,可以是栈中的值或堆中对象的引用
罢了