值传递?引用传递?傻傻分不清楚

# 不可变对象
基本类型的不可变对象,对它进行运算操作其实就是创建新的对象,然后将原先的变量名绑定到新的对象上

  1. 值传递
  2. 引用传递

# 可变对象

  1. 值传递:将实参的值完全复制一份给形参,改变形参的值并不会影响外部实参的值。
    这种方式对于可变对象比较少见,因为对复杂类型的参数进行完全复制,会付出额外的空间与时间代价。
    php中数组,会将数组完全复制一份进行传递。

  2. 引用传递:将实参的引用给形参,两个变量指向同一个对象,即引用传递
    特征:对于变量的成员进行修改时,会直接影响原变量;而如果对传递过来的变量进行重新赋值,则不会影响原变量,并且此后再修改变量的成员,也不会影响原变量。
    大多数编程语言都采用这种方式传递复杂类型的参数。

  3. 指针传递(实际上也是值传递):此时指针的值是另一个变量的地址
    特征:无论是对于变量成员的修改,还是对变量重新赋值,都会影响到原对象。
    php/JAVA 中的 & ,使两个变量实际上使用了同一个变量容器(又名: zval )

不同语言

  1. Python中只有引用传递
  2. PHP有如上面所说的特点
  3. javascript
  4. JAVA中只有值传递