java 引用类型变量值传递问题?
天蓬老师
天蓬老师 2017-04-17 17:55:12
[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),我该怎么做,小弟是菜鸟,求大神解答?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(6)
高洛峰

这样?

stringBuffer1.append(stringBuffer.toString());
ringa_lee

把你的stringBuffer通过toString方法保存为一个String,后面直接用带一个String参数的StringBuffer构造方法初始化。

高洛峰

在Java中,对象之间的赋值是引用赋值,改变赋值对象的值会引发原对象的值发生改变。如果要实现你说的效果,应当使用构造方法创建新对象。比如说,你可以这样做:

final String initialValue="234";
StringBuffer s1=new StringBuffer(initialValue);
StringBuffer s2=new StringBuffer(initialValue);
高洛峰
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 的解决办法不错
ringa_lee
stringBuffer1.replace(0,stringBuffer1.length(),stringBuffer.toString());

这个也许可以帮助你
或者你就不先实例话stringBuffer1 而在赋值的那一段实例化并传入stringBuffer.toString()

巴扎黑

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号