# 不可变对象
基本类型的不可变对象,对它进行运算操作其实就是创建新的对象,然后将原先的变量名绑定到新的对象上
- 值传递
- 引用传递
# 可变对象
值传递:将实参的值完全复制一份给形参,改变形参的值并不会影响外部实参的值。
这种方式对于可变对象比较少见,因为对复杂类型的参数进行完全复制,会付出额外的空间与时间代价。
php中数组,会将数组完全复制一份进行传递。引用传递:将实参的引用给形参,两个变量指向同一个对象,即引用传递
特征:对于变量的成员进行修改时,会直接影响原变量;而如果对传递过来的变量进行重新赋值,则不会影响原变量,并且此后再修改变量的成员,也不会影响原变量。
大多数编程语言都采用这种方式传递复杂类型的参数。指针传递(实际上也是值传递):此时指针的值是另一个变量的地址
特征:无论是对于变量成员的修改,还是对变量重新赋值,都会影响到原对象。
php/JAVA 中的 & ,使两个变量实际上使用了同一个变量容器(又名: zval )
不同语言
- Python中只有引用传递
- PHP有如上面所说的特点
- javascript
- JAVA中只有值传递