public class StringBufferTest{
public static void main(String args[]){
StringBuffer sb1 = new StringBuffer("One");
StringBuffer sb2 = new StringBuffer("Two");
swap(sb1,sb2);
System.out.println("sb1:"+sb1);
System.out.println("sb2:"+sb2);
}
public static void swap(StringBuffer a,StringBuffer b){
a.append(" More");
b = a;
}
}
以上代码为什么为什么输出是sb1:One More sb2:Two啊,有点费解,希望高手帮小弟解答一些,万分感谢!
public static void main(String args[]){
StringBuffer sb1 = new StringBuffer("One");
StringBuffer sb2 = new StringBuffer("Two");
swap(sb1,sb2);
System.out.println("sb1:"+sb1);
System.out.println("sb2:"+sb2);
}
public static void swap(StringBuffer a,StringBuffer b){
a.append(" More");
b = a;
}
}
以上代码为什么为什么输出是sb1:One More sb2:Two啊,有点费解,希望高手帮小弟解答一些,万分感谢!
can't understand what you mean
sb2指向内存“Two” 而b指向sb2
当b = a;
b指向a 则b为One More
但sb2还是指向内存“Two”的。同样个人理解 仅供参考
StringBuffer sb2 = new StringBuffer("Two");
上面两句创建了两个StringBuffer对象,并且让sb1和sb2分别指向这两个对象,可以理解为它们指向了对象的地址,它们只是引用变量而已。
swap里面,传入的是引用,a和b也是两个引用。一开始a和sb1都指向了对象“one”,b和sb2都指向对象“two”。然后a.append(" More")改变了a指向的对象的内容,而b=a这个完全没关系啊,它只是让b也指向“one”而已,并不能真正改变“two”的内容,也对sb2没有影响。所以System.out.println("sb2:"+sb2)打印的仍然是对象“two”。
b此时应该指向oneMore了吧
内存分析情况图如下(若有错请高手指点):
代码如下(如楼主差不多的):
public class Test{
public static void main(String[] argv){
StringBuffer a=new StringBuffer("one");
StringBuffer b=new StringBuffer("two");
Test.swap(a,b); System.out.println("Main方法中的值:\na is"+a+"\nb is"+b);
}
static void swap(StringBuffer a,StringBuffer b){
a.append(" more");
b=a;
System.out.println("swap方法中的值:\na is"+a+"\nb is"+b);
}
}
doc下的运行结果如下图:
内存分析情况图如下:doc下的运行结果如下图:
不好意思有点罗嗦了。