站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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


看了几位高手的指点理解了,谢谢几位的解释!


那还不结贴?
又一个不结贴的!!!
唉!!!


↑返回目录
前一篇: 后台用system.out输出占用的资源多不多
后一篇: 如何在java中模拟执行windows命令提示符下的命令,比如模拟在命令提示符下执行ant