首页新闻找找看学习计划

一个Java 题 求问

0
[已解决问题] 解决于 2019-08-02 15:56

下面是代码:

public class Demo {
    public static void main(String[] args){
        
        StringBuffer a=new StringBuffer("A");
        StringBuffer b=new StringBuffer("B");
        operator(a,b);
        System.out.println(a+","+b);
    }
    public static void operator(StringBuffer x,StringBuffer y){
        y=x;
    }

}

输出的结果A,B

为什么 operator 方法里的操作没有生效、能不能给出以下验证的方法

漫天de光的主页 漫天de光 | 初学一级 | 园豆:23
提问于:2019-08-01 23:57
< >
分享
最佳答案
1

在传递参数中,分别把a b所指向的地址的副本传递给了x y, x指向了A,y指向了B, 后面改变了y的指向,但对a,b并未有印象。如果是y.append() 那么b的值会有变化。

奖励园豆:5
DDiamondd | 初学一级 |园豆:186 | 2019-08-02 01:26
其他回答(3)
1

你应该把stringbuffer看成一个数据类型,只有传递对象的引用时,改变引用的值才会影响对象本身

小光 | 园豆:1825 (小虾三级) | 2019-08-02 09:22
1

public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence

心里向阳-无惧悲伤° | 园豆:206 (菜鸟二级) | 2019-08-02 10:43

大哥、能不能跟我说一下 这里的 细节,我在看 java 源码的时候没有什么重大 发现

支持(0) 反对(0) 漫天de光 | 园豆:23 (初学一级) | 2019-08-02 13:06
0

不管事值传递还是引用传递,传递的都是副本。y=x改变了副本指向的地址,副本本身没有变化

从入门到到放弃 | 园豆:108 (初学一级) | 2019-09-06 11:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册