为什么我在方法中改变静态变量的值是相同的

时间:2014-05-13 14:23:42

标签: 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("outside x: "+x);
    }
}

输出

inside x: 10
outside x: 20

由于静态变量只有一个副本,为什么x的值仍为20?为什么方法change()中的更改不会永久更改静态变量?

2 个答案:

答案 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