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