当前页面: 开发资料首页 → J2SE 专题 → java中static方法问题
java中static方法问题
摘要: java中static方法问题
public class Test{
public static void main(String[] args){
StringBuffer a=new StringBuffer(-#34;A-#34;);
StringBuffer b=new StringBuffer(-#34;B-#34;);
operate(a,b);
System.out.println(a+-#34;.-#34;+b);
}
static void operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
//System.out.println(x+-#34;.-#34;+y);
}
}
为什么我加了注释那行就输出AB.AB,而main方法中的打印语句缺显示AB.B,请问哪位高手给解释一下,为什么y=AB没有传值给变量b?
x.append(y)是把堆中的值给改变了,变成AB
而y只是指向AB,并没有改变y的值。方法是在栈中执行的,
执行完就被释放了,在mian中打印时,y 的值还是B
因为在函数operate中对y进行赋值,它的作用范围就在函数内部,出了这个函数就不起作用了。
而调用operate函数时给它的参数是传值而不是传递地址,所以在函数内部对y的改变是不能影响
外面的变量b的。
Java都是传值调用的,所以在method中间变换了y指向地址不影响method外的变量的
x,y都是引用,a的内容改变了是因为x.append(y)这句把x指向的对象的值改变了,而a也是指向这个对象的,所以a的值改变了,至于y=x,只是把y这个引用指向了x引用的相同的对象(AB),并没有改变b指向的对象的值,并且b还是指向原来那个对象(B),所以经过
operate以后,a为AB,b为B
看了几位高手的指点理解了,谢谢几位的解释!
那还不结贴?
又一个不结贴的!!!
唉!!!