java - 如下代码:main方法中调用change方法后,b返回为什么还是:"B",a和b不是已经指向同一个对象了吗?

查看:416
本文介绍了java - 如下代码:main方法中调用change方法后,b返回为什么还是:"B",a和b不是已经指向同一个对象了吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

public class Test01 {

public void change(StringBuffer a, StringBuffer b){
    a.append(b);
    b=a;
    System.out.println(b);
}
public static void main(String[] args) {
    StringBuffer a = new StringBuffer("A");
    StringBuffer b = new StringBuffer("B");
    Test01 t = new Test01();
    t.change(a, b);
    System.out.println("a:"+a);

//此处main方法中调用change方法后,b返回为什么还是:"B",a和b不是已经指向同一个对象了吗?

    System.out.println("b:"+b);
}

}

解决方案

楼上说的基本都对,但是我觉得我说的你可能更容易理解。
change(StringBuffer a, StringBuffer b)方法中的a和b仅仅是参数的名字,与外部调用时候t.change(a, b);中的a和b没有任何关系。换一种写法你更加容易明白并且不会混淆:

public void change(StringBuffer x, StringBuffer y){
    x.append(y);
    y=x;
    System.out.println(y);
}

外部调用仍旧为你写的t.change(a, b);不变。答案还是一样的。
这样你就更容易明白,虽然x与a都指向a的内存地址,y与b都指向b的内存地址,但是x与a,y与b都不是同一个变量。
此处改变x中指向内容的值,那么a由于指向同一个地址,所以结果变了。
y指向的地址从b变成了x(说是a也可以),但是这并不代表b的指向地址也变了,所以这里b的值是不会改变的。

这篇关于java - 如下代码:main方法中调用change方法后,b返回为什么还是:"B",a和b不是已经指向同一个对象了吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆