转自:http://hi.baidu.com/cuiyueboke/blog/item/4be6bfec85f0e53f26979113.html
今天回想起来Java考试时有这么一道题,先不说别的,先看看下面这段代码:public class MyDemo {
public MyDemo(){ }
public static void operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
System.out.println(x+","+y);
}
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+","+b);
}
}
就是这道题,可算给弄明白了,如果先看运行结果的话是:
AB,AB
AB,B
如果参数是简单类型的那么传递的就是 值,比如 int char 等等
如果参数是对象类型(引用类型)那么传递的就是 地址(引用)!
很明显这里传递的是地址(引用)传递2个StringBuffer 对象!
注意啦:
x 会指向 a 所指向的内存(可以理解为都指向A),y 会指向 b 所指向的内存,(可以理解为都指向B)
x.append(y); //这句话把 y 指向的值追加给x指向的值,这个时候x 和a 指向的内存都是AB,y指向的内存仍然是B
y=x;//这句话就是把 x 的值 附值给 y, 附的是地址!
这样 a,y,x 同时值向 AB,b仍然指向 B
System.out.println(x+","+y); 这里所以打印 AB,AB
System.out.println(a+","+b); 这里所以打印 AB ,B