当前位置 博文首页 > 我咋总是忘记密码的博客:Java只有值传递,没有引用传递

    我咋总是忘记密码的博客:Java只有值传递,没有引用传递

    作者:[db:作者] 时间:2021-07-19 22:37

    今天在牛客上做了一道题目。
    以下代码结果是什么?
    public class foo {
    public static void main(String sgf[]) {

    StringBuffer a=new StringBuffer(“A”);

    StringBuffer b=new StringBuffer(“B”);

    operate(a,b);

    System.out.println(a+”.”+b);
    }
    static void operate(StringBuffer x,StringBuffer y) {
    x.append(y);
    y=x;
    }
    }
    我选的答案是 AB.AB
    其实正确的解答应该时AB.B才是对的
    看了解析加上看了GitHub中的内容我才明白
    1.在还没有进行交换前
    a和x 都是指向 “A”的
    其中x 是a 的拷贝品 指向地址 a
    b和y 是指向“B”的
    其中 y是b 的拷贝品 指向地址 b
    这时候 对 x 进行了 append 操作, 于是地址 a 进行了 append 操作 得到了AB
    这个时候,将x 的地址给了 y 于是改变了y 指向的地址,此时y 指向了 a地址
    但是 对于b 来说,它本身的地址是没有受到影响的。所以结果是AB.B

    在GitHub上看到了更全面的解答
    GitHub地址 为什么 Java 中只有值传递?
    有兴趣的可以去看。

    cs