java - 如下代码:main方法中调用change方法后,b返回为什么还是:"B",a和b不是已经指向同一个对象了吗?
本文介绍了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屋!
查看全文