黑马程序员技术交流社区
标题:
关于Stringbuffer?
[打印本页]
作者:
↙五线谱╲
时间:
2013-10-31 23:23
标题:
关于Stringbuffer?
public class StringBufferTest
{
static void aMethod(StringBuffer sf1, StringBuffer sf2)
{
sf1.append(sf2);
sf2 = sf1;
}
public static void main(String[] args)
{
StringBuffer sf1 = new StringBuffer("A");
StringBuffer sf2 = new StringBuffer("B");
StringBufferTest.aMethod(sf1, sf2);
System.out.println(sf1 + ":" + sf2);
}
}
既然在函数里sf2=sf1了,那么sf1和sf2应该指向同一一个对象,那么打印出来的也应该是AB:AB,可为什么是AB:B呢?请大神指路!
作者:
忄雾飞扬
时间:
2013-10-31 23:37
StringBuffer相当于 String 的字符串缓冲区,不能修改。但是可以通过append等方法的调用来改变该缓冲区的长度和内容。
作者:
陈家林
时间:
2013-11-1 02:19
晕啊,因为sf2=sf1 所以sf2中的指针(内存中的栈地址)就是sf1中的指针;一样的指针指向同个sf1堆中, 原来的sf2堆就给自动回收了,ok ok
作者:
零下五度的水
时间:
2013-11-1 03:13
public void change (int i) { i = 5; }
调用这个方法之后 i 的值是不会变化的,这个你应该知道吧,别问我为什么,原因好像是什么栈顶操作原理,跟天书似的
static void aMethod(StringBuffer sf1, StringBuffer sf2) { sf1.append(sf2); sf2 = sf1; }
sf1改变的是堆里的值,相当于改变了引用的对象的属性,sf1本身栈里的值没变,引用还是调用方法之前的引用
sf2改变的是栈里的值,跟上面那个 i 一样,方法改变栈里的值结束方法之后栈里的值是要回归的,所以你的 sf2 输出还是 B
作者:
黄炳期
时间:
2013-11-1 08:35
如果问题已经解决,请及时修改主题为“提问结束”。谢谢。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2