10.2.5 传值引用和传址引用
传值引用主要是针对基本数据类型而言。所谓传值引用,就是在进行变量的传递过程中,传递的是变量实际的值,是一个新的拷贝,一个变量值不会影响另一个变量值的改变。
【实例10.8】这是一个值传递的实例程序。
01 public class test2
02 {
03 public static void main(String[]args)
04 {
05 int a=10;
06 int b=a;
07 System.out.println("在重新给a赋值前a的值:"+a+""+"b的值:"+b);
08 a=30;
09 System.out.println("在重新给a赋值后a的值:"+a+""+"b的值:"+b);
10 }
11 }
【代码说明】第5~6行定义了两个整型变量a和b,第7行第一次输出两个变量的值。第8行改变变量a的值,第9行再次输出两个变量的值。
【运行效果】
在重新给a赋值前a的值:10 b的值是10
在重新给a赋值前a的值:30 b的值是10
从上面的程序段可以看出,“a”的值改变,并没有对“b”产生任何影响,这就是传值引用的特点。
传址引用主要是针对对象操作,它传递的是一个对象句柄的拷贝。也就形成了多个变量操作一个对象的局面,任何一个针对句柄操作的变量,都会影响到其他的变量。
【实例10.9】这是一个对象传址的实例。
01 public class test3
02 {
03 int x=2;
04 public static void main(String[]args)
05 {
06 test3 t=new test3();
07 test3 t1=t;
08 System.out.println("测试前的数据:");
09 System.out.println("输出两个数据值:");
10 System.out.println("t.x="+t.x);
11 System.out.println("t1.x="+t1.x);
12 System.out.println("测试后的数据:");
13 t.x=3;
14 System.out.println("输出两个数据值:");
15 System.out.println("t.x="+t.x);
16 System.out.println("t1.x="+t1.x);
17 }
18 }
【代码说明】第3行定义了类test3中的一个变量x,并设置了初始值为2。第6~7行创建两个对象t和t1,第8~11行初次输出两个对象中x的值,此时值没有变化。第13行设置对象t中的变量x为3,此时如果输出对象t1的x值,则可以看到也发生了变化。
【运行效果】
测试前的数据:
输出两个数据值:
t.x=2;
t1.x=2;
测试后的数据:
输出两个数据值:
t.x=3;
t1.x=3
从上面的程序段可以看出,一旦“t.x”的值发生变化,“t1.x”的值也紧随着改变,这就是传址引用的特点。