background image

  void method1(){
  StringBuffer x=new StringBuffer("Hello");
  this.change(x);
  System.out.println(x);
  }
  void int change(StringBuffer i){
  i.append(" world!");
  }

    看 起 来 没 什 么 变 化 , 但 是 这 次 mothed1 中 执 行 了 change (x) 后 , x 的 值 不 再
是"Hello"了,而是变成了"Hello world!"。这是因为 x 传递给 change(i)的是 x 的引用。这是最
经典的传引用。
  似乎有些奇怪了,两段程序没有特别的不同,可是为什么一个传的是值而另一个传
的是引用呢?......
  2 非要搞清楚传值还是传引用的问题吗?
  搞清楚这自然是有必要的,不然我也不需要写这么多了,不过的确没有到 "非要"的
地步。
  首先,如果我们不太关心什么是传值什么是传引用,我们一样能写出漂亮的代码,
但是这些代码在运行过程中可能会存在着极大的隐患。
  全局变量是让大家深恶痛绝(又难以割舍)的东西,原因就是使用全局变量要特别注
意数据的保护。如果在多线程的程序里使用全局变量简直就等于跟自己过不去。不了解传
值和传引用的问题,跟使用全局变量不考虑数据保护的罪过是不相上下下的,甚至有时
候比它还要糟。你会莫名其妙,为什么我的返回参数没有起作用,为什么我传进去的参数
变成了这样......?
  一个例子:
  //例 3

  void mothed1(){
  int x=0;
  int y=1;
  switchValue(x,y);
  System.out.println("x="+x);
  System.out.println("y="+y);
  }
  void switchValue(int a,int b){
  int c=a;
  a=b;
  b=c;
  }

  上面是一个交换 a,b 值的函数,看起来似乎蛮正确的,但是这个函数永远也不会完成
你想要的工作。
  还有一个例子:
  //例 4