关于网友提出的“ 向各位前辈求助:关于值传递和引用传递(高手勿笑)”问题疑问,本网通过在网上对“ 向各位前辈求助:关于值传递和引用传递(高手勿笑)”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 向各位前辈求助:关于值传递和引用传递(高手勿笑)
描述: public class Foo
{
public static void main (String[] args)
{
Foo f = new Foo();
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
f.operate(a, b);
System.out.println("a = " + a + "\n" + "b = " + b);
}
public void operate (StringBuffer x, StringBuffer y)
{
x.append(y);
y = x;
System.out.println("x = " + x + "\n" + "y = " + y);
}
}
输出:
x = AB
y = AB
a = AB
b = B
如上,operate方法中的y输出了AB,为什么输出的最后一行却是:b = B,而不是:b = AB?
难道b是以值传递的方式传入了operate方法中?那又如何解释a的输出呢?
谢谢!
解决方案1: public void operate (StringBuffer x, StringBuffer y)
{
x.append(y);//这里的x并不是方法外的a,只是指向了和a一样的内存地址,执行x.append(y);后,往x志向的内存地址追加内容y,因为x和a指向相同的地址,所以在方法外,a的内容和x的内容是一样的
y = x; //这里的y不是方法外的b,只是指向了和b一样的内存地址,执行y=x后,只是把y的指向改变了,b没有任何改变
System.out.println("x = " + x + "\n" + "y = " + y);
}
以上介绍了“ 向各位前辈求助:关于值传递和引用传递(高手勿笑)”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3156779.html