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”的值也紧随着改变,这就是传址引用的特点。