日期:2014-05-20  浏览次数:20594 次

关于StringBuilder的一些问题,第一次发帖求支持,大家看看

public class Test{
 public static void main(String[] args){
   StringBuilder a = new StringBuilder("A");
   StringBuilder b = new StringBuilder("B");
   operate(a,b);
   System.out.println(a+","+b);
 }
 static void operate(StringBuilder a,StringBuilder b){
  a.append(b);
  b=a;
 }
}



输出结果为什么是AB,B
而不是AB,AB呢?

------解决方案--------------------
这个涉及到引用传递的问题! 在方法中的 a 和 b 在栈中是虚拟出来的,跟主函数中的a b 不是一回事,
a.append(b) 改变了方法和主函数中的a的值. 但是 b = a 这是吧a的内存地址赋给了方法中的b 
方法中的b 在出了方法后弹栈了,主函数中的b值一直就没变
------解决方案--------------------
引用:
Java code?123456789101112public class Test{ public static void main(String[] args){   StringBuilder a = new StringBuilder("A");   StringBuilder b = new StringBuilder("B");   operate(a,b);……


为什么a的值是AB?
 因为虽然传递的a的引用副本(说法其实略有问题)
但是a.append(b)修改的是引用副本指向的内容,a指向的内容自然也就变了
为什么b值为B?
  因为b=a;只是简单的把引用副本指向了a而已,它所指向的内存里面的内容没变!
   说白了,一个是地址的改变
    一个是地址内容的改变!