C++
- 定义:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
- int a=2,int &ra=a;
a为目标原名称,ra为目标引用名。给ra赋值:ra=1; 等价于 a=1;如果操作ra的话相当对a进行操作。下面是一个简单的例子:
int i=2;
int &ri=i;
ri++;
cout<< "i :"<< i <<" ri: "<< ri<<endl;
//打印结果是 i :3 ri: 3
java
-
java中的对象引用性质上跟C++的引用大同小异。区别是创建一个对象变量时不需要加上&(java中基本数据类型没有引用这个概念),该变量默认就是引用,还有另外一个重要的区别是java中的引用在改变其所"指向"时不改变其他最初和它指向同一内容的引用的"指向"。描述可能有点难理解,下面是一个例子
public class ReferClazz { public static void main(String args[]){ ReferClazz r0 = new ReferClazz(0); ReferClazz r1 = r0; r1.change(100); System.out.println("change--"+"r0 : "+r0+" r1 : "+r1); r1 = new ReferClazz(111); System.out.println("refer--"+"r0 : "+r0+" r1 : "+r1); // change--r0 : 100 r1 : 100 // refer--r0 : 100 r1 : 111 } int referNum; public ReferClazz(int referNum){ this.referNum = referNum; } public void change(int x){ this.referNum = x; } public String toString(){ return referNum+""; }
}
例子中引用r1改变了指向的对象并没有使r0改变指向的对象,这样验证了前面的说法。但需要注意的是在Java中String对象的引用是一种比较特殊的存在,具体可参考https://m.oschina.net/blog/507100
##php
php引用本质上跟C++大同小异,但有一个区别是php可以通过unset方法解开引用变量和其所指向的内容,使该引用不在指向该内容,但“解开”后并不改变其他最初和它指向同一内容的引用的"指向"。