一句话,引用的拷贝
----------------解决方案--------------------------------------------------------
可以负责的说,JAVA中没有传址一说.之所以会存在Object是"传址"的理解,是因为对JAVA中reference本身的含义理解不清楚.
--------------------------------------------------------
呵呵,不如你举个例子出来,好让我们反驳反驳。
顺便说说,注意所谓 “传址” 和传 “引用”。 "传址" 是 "传值" 的一种特殊情况,也是属于" 传值" 的一种,引用是C++里面新引进到C家族中的一种东东。
我估计你受到原文的影响:“实际经验却告诉我们所有 Java 的对象都是传址的(by reference)”。理解成了传 “引用”,其实说成是传 “指针” 可能更加贴切。
不知我说得是否正确~欢迎批驳。
----------------解决方案--------------------------------------------------------
JAVA里面都是传值,当是引用的时候,传的就是引用的值,
传值的特点就是会拷贝一份,所以你可以用传给你的引用对对象进行操作,但是你如果把传给你的这个引用指向别的地方,将
影响不了原来的那个对象,因为传给你的只是原来的引用的拷贝而已
----------------解决方案--------------------------------------------------------
所以说,还是从C语言的角度理解比较合理点:传值 和 传址, 传址只是传值的一种特殊情况
我觉得我们是不是在玩文字狱?
----------------解决方案--------------------------------------------------------
C++中的引用是一个对象的别名,一经赋值就不能改变,而JAVA中的引用不是C++中所谓的引用。其实是一个句柄的地址。也就是指针的指针。而这个指针是可以改变的,这是我对JAVA中和C++中引用的理解,各位大哥有说错的地方请指正。
----------------解决方案--------------------------------------------------------
我也觉得JAVA中所谓的传引用其实是C++中的传地址。而地址也可以看成是一个值来看待。。JAVA中不容许使用指针,所以出来个名词引用,而这个引用和C++的引用是不一样的。C++中引用是引用,指针是指针,而JAVA中的引用其实我觉得是指针。。不对之处请三位斑竹老哥和其他兄弟指正。。
----------------解决方案--------------------------------------------------------
哈哈终于弄出一个有争论的贴了
----------------解决方案--------------------------------------------------------
以下是引用千里冰封在2007-6-25 16:16:11的发言:
你品味这么特殊?
你品味这么特殊?
啥意思啊 这有什么特出啊
----------------解决方案--------------------------------------------------------
以下是引用神vLinux飘飘在2007-6-25 19:06:09的发言:
所以说,还是从C语言的角度理解比较合理点:传值 和 传址, 传址只是传值的一种特殊情况
我觉得我们是不是在玩文字狱?
所以说,还是从C语言的角度理解比较合理点:传值 和 传址, 传址只是传值的一种特殊情况
我觉得我们是不是在玩文字狱?
其实我觉得C里面说的传址就有混淆视听之嫌,事实上C里面所有的函数参数也是传值的.刚开始学C的时候就被传址,传值这两个词搞迷糊了,待我学了汇编,了解编译原理之后,才发现传址这个词根本就是画蛇添足!
我怀疑有人可能用类似:
程序代码:
void sort(int a[],int length){..}
来反驳我,这个如果真的有我再回应.
我现在能想到的C,C++中能和传址扯上关系的就C++中的引用的.
[此贴子已经被作者于2007-6-25 20:21:39编辑过]
----------------解决方案--------------------------------------------------------
另外,可能有人没学过C++,明确一下C++中的引用:
程序代码:
void swap(Typte &a,Typte &b){
Typte tmp =a;
a =b;
b =tmp;
}
上面就是C++中的引用.
而JAVA中,有类似的代码:
程序代码:
void swap(Object a,Object b){
Object tmp =a;
a =b;
b =tmp;
}
虽然这个a,b也是引用,但此引用与彼引用是不一样的,效果也大大不同.
在我看来,这才是传址与传值的区别之所在.
----------------解决方案--------------------------------------------------------