如下代码: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的值是不会改变的。
回答:
t.change(a, b);
在方法里改变b的引用,对方法外是不起作用的。
回答:
Java里面所有的参数都是传值,也就是说t.change(a, b)
里面的b是对main里面b的一个浅拷贝,直接对他赋值不会影响外层main的b值,但是两者指向的都是同一个对象,所以a.append(b)
这个改变了a对象的内容
回答:
作用域的问题。
public void change(StringBuffer a, StringBuffer b){ a.append(b);
b=a;
System.out.println(b);
}
这个里面的a和b,以及操作:
a.append(b); b=a;
System.out.println(b);
只在change();方法起效。
StringBuffer a = new StringBuffer("A"); StringBuffer b = new StringBuffer("B");
这个定义为全局变量可以看看效果。
作用域:作用域<百度百科>
回答:
JAVA都是值传递,就是把这个对象引用传进去了也只能改变这个对象的值,不能让它指向另外一个~
以上是 如下代码:main方法中调用change方法后,b返回为什么还是:"B",a和b不是已经指向同一个对象了吗? 的全部内容, 来源链接: utcz.com/p/180957.html