java基础方法调用的问题
public class Pass{
static int j=20;
public static void main(String argv[]){
int i=10;
Pass p = new Pass();
p.amethod(i);
System.out.println(i);
System.out.println(j);
}
public void amethod(int x){
x=x*2;
j=j*2;
}
}
为什么结果是 10和40啊,不是20和40了
------解决方案--------------------这个就是方法变量的理解问题。i是main方法的局部变量,这是个简单变量。当调用amethod方法的时候,i把它的值(注意:是值)传递给该方法的参数x,方法执行后x的值变成了20,你没有打印。i的值当然不变。
------解决方案--------------------i是局部变量,对于java来说,只有值传递,这里调用amethod这个方法的时候,传递的是i这个值的副本,在amethod方法内部做到任何操作,都不影响外部的这个i的值。
------解决方案--------------------值传递当然不改变变量本身的值,操作地址的话就OK了
------解决方案--------------------java是值传递的,不是地址传递的
------解决方案--------------------值传递。传进去的仅仅是一个副本,改变的也是副本,原来的变量根本没有改变。而这里的j是实例变量,方法里面可见,所以变成了40
------解决方案--------------------在大括号中定义的变量出了大括号也就是出了他的作用域,会被垃圾回收 你方法中定义的x当方法执行完了就不存在了!如果把x=x*2,改为i=x*2那么就会是你想要的结果了