求救:一个迷惑的问题
class example {
private static void swap(StringBuffer s1,StringBuffer s2) {
s1.append("sky");
StringBuffer t;
t = s1;
s1 = s2;
s2 = t;
System.out.println("in :"+s1);
System.out.println("in :"+s2);
}
public static void main(String[ ] args) {
StringBuffer sb1= new StringBuffer();
StringBuffer sb2= new StringBuffer();
sb1.append("ut");
sb2.append("wuhan");
swap(sb1,sb2);
System.out.println(sb1);
System.out.println(sb2);
}
}
打印结果是:
in :wuhan
in :utsky
utsky
wuhan
我是这样想的,因为sb1、sb2是本地变量,那么就是按值传递,传递的是sb1、sb2的一份copy.
于是我就改成这样:
class example {
static StringBuffer sb1= new StringBuffer();
static StringBuffer sb2= new StringBuffer();
private static void swap(StringBuffer s1,StringBuffer s2) {
s1.append("sky");
StringBuffer t;
t = s1;
s1 = s2;
s2 = t;
System.out.println("in :"+s1);
System.out.println("in :"+s2);
}
public static void main(String[ ] args) {
sb1.append("ut");
sb2.append("wuhan");
swap(sb1,sb2);
System.out.println(sb1);
System.out.println(sb2);
}
}
但输出结果仍然一样!
实在搞不明白.
既然是按值传递,传递的就是本地的一份copy,那么为什么里面的append()方法又传回改变后的值了?
求高人解答!