值传递和引用传递

  |  
  • 值传递(pass by value)

    • 是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
  • 引用传递(pass by reference)

    • 是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

口述

先说基本类型和引用类型

基本类型创建的时候,他的值都分别会放在栈中和常量池中的,而引用类型的话他的值是存放在堆内存中,然后栈存放的只是这个对象的地址值

其实所以值传递,其实很多人都会有误区都认为传递的参数如果是普通类型,那就是值传递,如果是对象,那就是引用传递,

并不是这样的,其实如果把值传递和引用传递放在C语言中,那就地址传递,其实Java也是可以这样理解的, 传递也是地址值,

  • 在调用函数的时候,他会把实际参数的地址值拷贝一份传递到函数中

    • 如果这个地址的实际参数是 在栈中 的话,他会 直接拷贝值 ,所以函数内部对参数进行操作是不会对实际参数产生影响的,

    • 如果拷贝的原 值在堆中的地址 ,他会 根据该地址值去堆中对应的对象 ,再进行操作,所以测函数内对值的操作是影响实际参数的.

其实不管是值传递还是引用传递,其实都是一种求值策略,在求值策略中,叫做按共享传递, 所以简单点的来说, java的传递是值传递,而这个值是地址值,可以是栈中的值或堆中对象的引用罢了

参考

文章 : http://mp.weixin.qq.com/s/F7Niaa7nD1tLApCEGKAj4A

Copyright © 2018 - 2020 Kuanger All Rights Reserved.

访客数 : | 访问量 :