Java 为什么是静态变量';当我在方法中更改它时,s值是相同的
输出Java 为什么是静态变量';当我在方法中更改它时,s值是相同的,java,variables,static,Java,Variables,Static,输出 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("
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);
}
}
既然静态变量只有一个副本,那么为什么x
的值仍然是20
?为什么方法change()
中所做的更改不会永久更改静态变量?调用change(x)
时,传递的是变量x
的副本,而不是x
本身。Java中没有传递引用;这是传递值。如果要更改外部x
,请执行以下操作:
inside x: 10
outside x: 20
并修改将(x)
更改为:
x = change(x);
或者根本不将
x
传递给change()
方法。没有必要将x
作为参数传递给change
,而且它隐藏成员变量的事实是不希望出现的行为的原因(您的change
函数只是修改参数,而不是成员变量)
下面的代码更简单,可以达到预期效果:
public static void change(int x){
x=10;
System.out.println("intside x: "+x);
return x;
}
x=10
正在更改局部变量的值,该变量也称为x
。使用Demorun.x=10
访问静态字段。感谢您消除我的疑问。我使用“x”作为静态变量的名称以及方法参数的名称,我想这就是我感到困惑的原因
public class Demorun
{
static int x = 20;
public static void change()
{
x = 10;
System.out.println("inside x: " + x);
}
public static void main(String[] args)
{
change();
System.out.println("outside x: " + x);
}
}