本人有如下,代码:
StringBuffer stringBuffer = new StringBuffer();
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer.append("234");
stringBuffer1 = stringBuffer;// 赋值
stringBuffer.append("567");//修改stringBuffer 的同时也修改了stringBuffer1
System.out.println(stringBuffer);// 234567
System.out.println(stringBuffer1);// 234567
我需要创建多个StringBuffer 对象,它们的初始值一样, 我期望得到的结果是,我在修改后面的值的时候,不会影响到其他前面的值(修改stringBuffer 的同时不修改了stringBuffer1),我该怎么做,小弟是菜鸟,求大神解答?
StringBuffer stringBuffer = new StringBuffer();
StringBuffer stringBuffer1 = new StringBuffer();
内存中分配两块空间 A B ,Buffer指向 A ,buffer1 指向 B 。
stringBuffer.append("234");
buffer指向的空间A 存入 234
stringBuffer1 = stringBuffer;// 赋值
buffer1 指向 空间 A 。此时 buffer 和 buffer1 都指向 空间A ,
以后你对buffer 的操作和对buffer1的操作一样,都是对 空间 A 的操作
B 空间没有引用指向他,B 就成为垃圾空间,等待被回收
注意:引用变量赋值,不能等同于值类型变量赋值,直接一个等号就可以
觉得 Honwhy 的解决办法不错
在Java中,对象之间的赋值是引用赋值,改变赋值对象的值会引发原对象的值发生改变。如果要实现你说的效果,应当使用构造方法创建新对象。比如说,你可以这样做:
final String initialValue="234";
StringBuffer s1=new StringBuffer(initialValue);
StringBuffer s2=new StringBuffer(initialValue);
这样?
stringBuffer1.append(stringBuffer.toString());
stringBuffer1.replace(0,stringBuffer1.length(),stringBuffer.toString());
这个也许可以帮助你
或者你就不先实例话stringBuffer1 而在赋值的那一段实例化并传入stringBuffer.toString()
把你的stringBuffer通过toString方法保存为一个String,后面直接用带一个String参数的StringBuffer构造方法初始化。
用“=”是引用赋值,两个变量实际上是指向的同一个对象,想一个修改不影响另一个,只能新建一个对象。