标题:JAVA问题大集合
只看楼主
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

一句话,引用的拷贝


可惜不是你,陪我到最后
2007-06-25 18:34
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
可以负责的说,JAVA中没有传址一说.之所以会存在Object是"传址"的理解,是因为对JAVA中reference本身的含义理解不清楚.
--------------------------------------------------------

呵呵,不如你举个例子出来,好让我们反驳反驳。

顺便说说,注意所谓 “传址” 和传 “引用”。 "传址" 是 "传值" 的一种特殊情况,也是属于" 传值" 的一种,引用是C++里面新引进到C家族中的一种东东。

我估计你受到原文的影响:“实际经验却告诉我们所有 Java 的对象都是传址的(by reference)”。理解成了传 “引用”,其实说成是传 “指针” 可能更加贴切。

不知我说得是否正确~欢迎批驳。

淘宝杜琨
2007-06-25 18:57
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
JAVA里面都是传值,当是引用的时候,传的就是引用的值,

传值的特点就是会拷贝一份,所以你可以用传给你的引用对对象进行操作,但是你如果把传给你的这个引用指向别的地方,将

影响不了原来的那个对象,因为传给你的只是原来的引用的拷贝而已

可惜不是你,陪我到最后
2007-06-25 19:02
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
所以说,还是从C语言的角度理解比较合理点:传值 和 传址, 传址只是传值的一种特殊情况

我觉得我们是不是在玩文字狱?

淘宝杜琨
2007-06-25 19:06
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
得分:0 

C++中的引用是一个对象的别名,一经赋值就不能改变,而JAVA中的引用不是C++中所谓的引用。其实是一个句柄的地址。也就是指针的指针。而这个指针是可以改变的,这是我对JAVA中和C++中引用的理解,各位大哥有说错的地方请指正。

2007-06-25 19:09
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
得分:0 

我也觉得JAVA中所谓的传引用其实是C++中的传地址。而地址也可以看成是一个值来看待。。JAVA中不容许使用指针,所以出来个名词引用,而这个引用和C++的引用是不一样的。C++中引用是引用,指针是指针,而JAVA中的引用其实我觉得是指针。。不对之处请三位斑竹老哥和其他兄弟指正。。

2007-06-25 19:13
野蛮女人
Rank: 5Rank: 5
等 级:贵宾
威 望:19
帖 子:827
专家分:0
注 册:2007-4-7
得分:0 
哈哈终于弄出一个有争论的贴了

[shadow=255,purple,5]好人不长命,祸害一万年![/shadow]
2007-06-25 19:19
野蛮女人
Rank: 5Rank: 5
等 级:贵宾
威 望:19
帖 子:827
专家分:0
注 册:2007-4-7
得分:0 
以下是引用千里冰封在2007-6-25 16:16:11的发言:
你品味这么特殊?

啥意思啊 这有什么特出啊


[shadow=255,purple,5]好人不长命,祸害一万年![/shadow]
2007-06-25 19:24
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
得分:0 
以下是引用神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编辑过]


My BlogClick Me
2007-06-25 20:13
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
得分:0 
另外,可能有人没学过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也是引用,但此引用与彼引用是不一样的,效果也大大不同.
在我看来,这才是传址与传值的区别之所在.

My BlogClick Me
2007-06-25 20:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-149919-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014666 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved