public class Demorun
{
static int x=20;
public static void change(int x){
x=10;
System.out.println("inside x: "+x);
}
public static void main(String[] args) {
change(x);
System.out.println("outside x: "+x);
}
}
输出
inside x: 10
outside x: 20
由于静态变量只有一个副本,为什么x
的值仍为20
?为什么方法change()
中的更改不会永久更改静态变量?
答案 0 :(得分:1)
当您致电change(x)
时,您传递的是变量x
的副本,而不是x
本身。 Java中没有pass-by-reference;这是价值传递。如果您想更改外部x
,请执行:
x = change(x);
并将change(x)
修改为:
public static void change(int x){
x=10;
System.out.println("intside x: "+x);
return x;
}
或根本没有将x
传递给change()
方法。
答案 1 :(得分:1)
没有必要将x
作为参数传递给change
,并且它隐藏成员变量的事实是导致不良行为的原因(您的{ {1}}函数只是修改参数而不是成员变量。)
以下代码更简单,并具有所需的效果:
change