值传递还是引用传递

通过代码分析:

[java][/java] view plaincopy

  1. public class ParamTest {
  2.      // 初始值为0
  3.      protected int num = 0;
  4.      // 为方法参数重新赋值
  5.      public void change( int i) {
  6.           i = 5;
  7.      }
  8.      // 为方法参数重新赋值
  9.      public void change(ParamTest t) {
  10.           ParamTest tmp = new ParamTest();
  11.           tmp. num = 9;
  12.           t = tmp;
  13.      }
  14.      // 改变方法参数的值
  15.      public void add(int i) {
  16.           i += 10;
  17.      }
  18.      // 改变方法参数属性的值
  19.      public void add(ParamTest pt) {
  20.           pt. num += 20;
  21.      }
  22.      public static void main(String[] args) {
  23.           ParamTest t = new ParamTest();
  24.           System. out.println( “参数–基本类型” );
  25.           System. out.println( “原有的值:” + t.num );
  26.            // 为基本类型参数重新赋值
  27.           t.change(t. num);
  28.           System. out.println( “赋值之后:” + t.num );
  29.            // 为引用型参数重新赋值
  30.           t.change(t);
  31.           System. out.println( “运算之后:” + t.num );
  32.           System. out.println();
  33.           t = new ParamTest();
  34.           System. out.println( “参数–引用类型” );
  35.           System. out.println( “原有的值:” + t.num );
  36.            // 改变基本类型参数的值
  37.           t.add(t. num);
  38.           System. out.println( “赋引用后:” + t.num );
  39.            // 改变引用类型参数所指向对象的属性值
  40.           t.add(t);
  41.           System. out.println( “改属性后:” + t.num );
  42.      }
  43. }
输出结果如下:
参数–基本类型
原有的值:0
赋值之后:0
运算之后:0
参数–引用类型
原有的值:0
赋引用后:0
改属性后:20
得出结论:
1. 基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法给原变量重新赋
值,也无法改变它的值。
2. 对象和引用型变量被当作参数传递给方法时,在方法实体中,无法给原变量重新赋值,但是可以改变它
所指向对象的属性。至于到底它是值传递还是引用传递,这并不重要,重要的是我们要清楚当一个引用
被作为参数传递给一个方法时,在这个方法体内会发生什么。
1、分析t.change(t. num);前后变化
2、分析t.change(t);前后变化
3、分析t.add(t. num);前后变化
4、分析t.add(t);前后变化

 

标签