Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么是静态变量';当我在方法中更改它时,s值是相同的_Java_Variables_Static - Fatal编程技术网

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);
    }
}