锁定老帖子 主题:关于程序语言中的参数传递
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-19
最后修改:2009-09-19
关于程序语言中的值传递问题很是让人迷惑,在此,更具自己的理解,以C语言和java语言为例来阐述一下参数传递。 import org.apache.commons.logging.Log; public class PersonT { public void changeInt(int i) { } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-09-19
最后修改:2009-09-19
"java语言中有两种:值传递以及引用传递。"
这句话还是不要再说了,虽然有过C经历的阁下还是可以区分所谓的值传递和引用传递, 但我记得james gosling(不知道这个拼对没有)说过,(事实上也确实是这样),java中都是pass by value ,即传值,关键要弄清,传的是什么值。只要记住都是pass by value,其实就可以搞清楚了,没必要整那么复杂 |
|
返回顶楼 | |
发表时间:2009-09-19
我还是觉得把他们区别开叫更好一些,你说的也对,都是传值,但是一个传递的是值的拷贝,另一个传递的是值所在内存区域的地址,为了表达出这种区别,程序中使用了值传递和引用传递;我想java语言的底层实现也是C语言;还是个人看法的习惯不同,就是这个值的理解不同,如果你认为是字节信息那么可定都是一样的。
|
|
返回顶楼 | |
发表时间:2009-09-19
你说的也对 但我觉得还是有些许问题(如果我没理解错的话)
“(在一个方法中创建一个对象....)但是在java中只有当此方法又返回值时候才修改其指向的内存单元,否则,其指向的内存单元不会改变即使赋值不起作用!” 从结果来看,这是对的,但实际上不是这样,即便传的是引用,也就是阁下说的“传递的是值所在内存区域的地址”,其实也是传的该值的拷贝,因此如果调用传进来的参数(某个对象的引用)的方法,那么这个拷贝跟原引用指向的是同一个对象实体,因此不用返回值就可以改变该对象,但如果新建对象,比如在方法中arg=new XXXX();那么该参数的值已经变成新建的对象的引用,跟传进来的那个原先的引用一点关系也没有了,他进行的操作,比如arg.setXXX();改变的是新建的对象的属性,所以,如果不返回,那么这个方法内的局部对象变量将没有意义,看起来像是这个操作不起作用 |
|
返回顶楼 | |
浏览 2644 次