|
发表于 1-8-2015 08:21 AM
|
显示全部楼层
本帖最后由 musicalangel 于 1-8-2015 08:23 AM 编辑
等号(=) , 在数学里面表示左边的值等于右边的值
而在, 在programming 里面的意思则是将右边的值丢到左边变数, 专业术语叫做传值( 或传址).
传的方法有两种, 就是你问的 pass by value(传值) 跟 pass by reference(传址)
pass by value 是将右边的变数的资料, "复制" 给 左边, 例如下:
A 的资料"复制"给 B, 在pass by value里面, A 跟 B 是不同个体, 你如何修改B, 都不会影响到A, 例如
- B=B-3;
- println(A);
- println(B);
复制代码
你会发现到结果是 3 0
听起来我像是讲废话对吧? 这是一般programming的用法. 你会这样认为是正常的.
至于pass by reference 是右边的"所在地"告诉左边. (所在地在专业术语称作 pointer / address, 可能意义不同, 但是我都是这样记忆的), 用法如下:
这边跟上面的不同是, C 存的不是数值(3), 而是A在记忆体里面的位置. 你如何修改C, 都会影响到A
- C=C-3;
- println(A);
- println(C);
复制代码
你会发现到结果是 0 0
因为C扣3的时候, C 指向 A, 所以A会受影响.
如果你看到这边还是不明白...
你就想象成,
pass by value 是鸣人的影分身, 每个都是实体,
pass by reference 是佐助的分身术, 只有一个是实体, 其他都是幌子.
至于为何有两种做法, 原因很多, 例如
1) 节省记忆体, 当变数很大的时候, 例如 double, big int 等, pass reference 会比 pass value 节省一些
2) 避免重复, 当你写大型系统的时候, 你会难免遇到一些需要重新命名, 但是他们都是一体的, 这时就要用到
3) 其他
如果不知道鸣人或佐助是什么的, 就只好保重了
共勉之... |
|