c++ 与java引用比较

c++中一个引用指向的地址不会改变,改变的是指向地址的内容,然而java中引用指向的地址在变!!
如果非要对比着看,那么Java中的“引用”倒是和C/C++的指针更像一些,和C++的“引用”很不一样。

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++   的模版机制提供了强力的支持

在c++中,引用只是对于一个变量起的别名,一旦定义就无法修改,即无法再指向其他变量,如程序中,对于aint的任何操作都等同于对于a的操作。

java定义的引用并不是这样。在java中,引用相当与指针,它与c中的指针主要有两个区别:一是引用不能进行地址操作,如数组的加一 操作,相当于引用只是只是指向数据的一个副本,而不是数据本身,这样就避免了由于对于地址的误操作而改变其他变量的值,甚至危害到系统的安全。二是 java中的引用只能指向对象,他的引用是在实例化对象时系统直接生成的,因此对于普通数据类型是不能进行引用定义的,如果要对普通数据类型进行函数调用 时的地址传递(即java中的引用传递),必须把数据封装到类中。
java的这种特性使得在java的函数或类的参数传递时可以实现与c中指针相同的功能。  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值