不是 之前是我弄错了 我仔细想了想。现在应该对了。希望对你有帮助。- public class StringBufferTest
- {
- static void aMethod(StringBuffer sf1, StringBuffer sf2)
- {
- sf1.append(sf2);
- sf2 = sf1;
- System.out.println(sf1 + ":" + sf2);//sf2指向了sf1,并不是s2.
- }
- public static void main(String[] args)
- {
- StringBuffer s1 = new StringBuffer("A");
- StringBuffer s2 = new StringBuffer("B");
- aMethod(s1, s2);
- System.out.println(s1 + ":" + s2);
- }
- }
复制代码 /*楼主 你是自己把自己弄乱了。这两个sf2不是同一个意思。aMethod里面的sf2和sf1是局部变量只在这个方法中有效。它是在aMethod函数加载时在堆中开辟的内存。
当你在main中调用aMethod方法后,
sf1.append(sf2);//sf1获得了s1的引用,并在s1指向的缓冲区中添加了B。这句话改变了sf1和s1对应的缓冲区中的内容。
sf2 = sf1; //在局部变量执行赋值语句是没有意义的,因为它们的内存都是在堆中新开辟的。
所以 你如果把程序改成我这样就明白了。
*/
|