讨论一下c++引用与java中引用的区别
以前一直以为它们是一样的,今天一下子觉得二者本质上是不同的,c++中一个引用指向的地址不会改变,改变的是指向地址的内容,然而java中引用指向的地址在变!!
不知道我的理解对不对,请讨论
问题点数:20、回复次数:8Top
1 楼steedhorse(晨星)回复于 2006-03-04 21:06:56 得分 0
如果非要对比着看,那么Java中的“引用”倒是和C/C++的指针更像一些,和C++的“引用”很不一样。Top
2 楼yxg80(林夕昱)回复于 2006-03-04 21:13:49 得分 0
哈哈,不过现在招java的公司多一些啊!!Top
3 楼steedhorse(晨星)回复于 2006-03-04 21:15:47 得分 0
楼主说的没错,C++的“引用”是从一而终的,而Java的“引用”可以改变被引用的对象。
它们只是用了同一个词而已,其实没有必要非得对比着看的。Top
4 楼ox_thedarkness()回复于 2006-03-04 21:19:04 得分 0
java去除指针概念,就用引用罗...
你看 java:
A a = new A(1);
A b = new A(2);
b = a;
没有问题,a 和 b引用同一个对象A(2),原来的A(1)成为没有被引用的对象。 垃圾回收机制会在之后的某个时刻把A(1)干掉。
而C++则不然。C++的引用就语义上说是“别名”,而并不是指针的另一种用法:
A a = A(1);
A b = A(2);
A& c = b; //c 是 b的别名
c = a; //并不是 c 引用 a,而是拷贝操作 c.operator= ( a )
就语言机制来说,java的引用是用来管理和命名对象;
而,C++的引用机制是很纯粹的,就是别名而已。
每种语言的特性都是整体的有机部分。
我们知道, java的引用机制是一个很复杂的机制。他必须区分“基本对象”和“复合对象”,你可以想象一下,如果其中没有基本对象,那么我们如何完成对象的复制? 唯一的解决方案是提供两个等于号,或者一律用构造函数.... 但是综合来看,他和垃圾回收形成了相当完美的组合方案。
而C++ 的引用机制为运算符重载提供了大幅度的支持。C++ 的引用是用类“模拟”基本对象的根本要求。 如果C++使用java那种引用,那么原本漂亮的 operator[]、 proxy class 等就很难实现了。 更进一步, C++ 的运算符重载对 C++ 的模版机制提供了强力的支持。Top
5 楼noOnlyCode(不错,偶就是传说中高数上下册都考80多分的牛逼人物!)回复于 2006-03-04 22:29:12 得分 0
而C++ 的引用机制为运算符重载提供了大幅度的支持。C++ 的引用是用类“模拟”基本对象的根本要求。 如果C++使用java那种引用,那么原本漂亮的 operator[]、 proxy class 等就很难实现了。 更进一步, C++ 的运算符重载对 C++ 的模版机制提供了强力的支持。
--------------
不懂ing……,介绍本可以明白这段话的书来。Top
6 楼fiftymetre(50米深蓝)回复于 2006-03-04 22:42:00 得分 0
C++引用在创建时必须进行初始化,而且不可重定义到一个不同的位置。但Java引用并不一定局限于创建时的位置。它们可根据情况任意定义,这便消除了对指针的部分需求。
偶不会JAVA顶一个吧Top
7 楼windywater(超级宇宙无敌大白痴)回复于 2006-03-05 00:11:42 得分 0
个人感觉Java里的引用像个二级指针。Top
8 楼jobs002(Oh! Office)回复于 2006-03-05 09:29:49 得分 0
除了收藏,没有办法。Top




