首页 > java 引用类型变量值传递问题?

java 引用类型变量值传递问题?

本人有如下,代码:

        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构造方法初始化。


用“=”是引用赋值,两个变量实际上是指向的同一个对象,想一个修改不影响另一个,只能新建一个对象。

【热门文章】
【热门文章】