如下代码: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返回为什么还是:&quot;B&quot;,a和b不是已经指向同一个对象了吗? 的全部内容, 来源链接: utcz.com/p/180957.html

回到顶部