当前位置: 代码迷 >> Java相关 >> JAVA问题大集合
  详细解决方案

JAVA问题大集合

热度:289   发布时间:2007-06-25 18:34:02.0

一句话,引用的拷贝


----------------解决方案--------------------------------------------------------
可以负责的说,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的时候就被传址,传值这两个词搞迷糊了,待我学了汇编,了解编译原理之后,才发现传址这个词根本就是画蛇添足!
我怀疑有人可能用类似:

程序代码:

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也是引用,但此引用与彼引用是不一样的,效果也大大不同.
在我看来,这才是传址与传值的区别之所在.
----------------解决方案--------------------------------------------------------
  相关解决方案