java StringBuffer传参问题
迷茫
迷茫 2017-04-17 16:12:56
[Java讨论组]
public static void mb_method(StringBuffer x, StringBuffer y) {    
    x.append(y);    
    y = x;   
}   
public static void main(String[] args) {     
    StringBuffer a = new StringBuffer("A");     
    StringBuffer b = new StringBuffer("B");     
    mb_method(a, b);     
    System.out.println(a + "," + b);   
} 

为何输出结果是:
AB,B

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
怪我咯

java的方法都是值传递,你在mb_method 里面, 让y赋值为x对外面的b根本没有影响。这里面的赋值都在在方法栈里面的,出栈之后,里面的复制跟外面无关。

这个方法可以简单认为是这样:

 Sb a; Sb b;  //invisable
 Sb x = a;
 Sb y = b;
 x.append(xx);
 y=x;

这样, y的改变,对b没有任何影响。

而a的值(实际上不是他的值变了,而是指向的对象修改了成员)为啥会改变,是因为方法中的x和a都指向了同一个对象,所以对x做成员操作就跟对a做成员操作一样。

PHP中文网

开始的时候a的值是"A",b的值是"B",
然后调用参数值传递的方式调用mb_method方法,方法内部a.append(b),此时a的值变成了"AB",又因为是值传递,y=x在方法返回后没有生效,b依然是"B",那么最终结果就是"AB,B"了

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

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