为什么说java中只有值传递
值传递和引用传递定义
- 值传递(pass by value):在调用函数时将实际参数复制一份(即创建副本,基本类型复制它的值,引用类型复制它的地址)传到函数中,这样对参数进行修改(这里指改变形参指向的地址),不会影响到实参(但是改变形参对象内容–指向地址内的内容,还是能够改变实参–比如说改变实参对象的属性值)
- 引用传递(pass by reference):调用函数时将实际参数的地址(即实际对象)直接传递到函数中,那么在函数中对参数进行修改(改变它的指向,比如说指向一个new的对象),将直接影响到实参(因为就是对实际对象进行操作)。
值传递 | 引用传递 | |
---|---|---|
根本区别 | 创建副本 | 直接传递实参(实参对象) |
所以 | 函数中无法改变原始对象 | 函数中可以改变原始对象 |
-
比喻:你有一把钥匙,朋友想来你家。
- 值传递-你复刻一把钥匙,把复刻的钥匙给朋友,朋友无论对复刻的钥匙做什么(比如说在钥匙上刻字),都不会影响你手上的原钥匙,但是用钥匙打开房子,改变房子里的布置,就相当于改变了对象的属性,改变的不是钥匙,而是钥匙打开的房子
- 引用传递-你直接把手里钥匙给朋友