Java中的静态变量如何工作?

Nig*_*mas 2 java

执行以下代码时

class Foo {

    static int size = 7;

    static void changeIt(int size) {
        size = size + 200;
        System.out.println("size in changeIt is " + size);
    }

    public static void main(String[] args) {

        System.out.println("size = " + size);
        changeIt(size);
        System.out.println("size after changeIt is " + size);
    }
}
Run Code Online (Sandbox Code Playgroud)

答案是

size = 7
size in changeIt is 207
size after changeIt is 7
Run Code Online (Sandbox Code Playgroud)

我期待的答案是

size  after changeIt is 207
Run Code Online (Sandbox Code Playgroud)

为什么静态变量的值在changeIt方法和main方法上有所不同?

Kep*_*pil 6

为什么staticIt方法和main方法中静态变量的值不同?

值不同,因为您没有更改static变量size,您更改了局部变量size.将代码更改为:

static void changeIt() {
    size = size + 200;
    System.out.println("size in changeIt is " + size);
}
Run Code Online (Sandbox Code Playgroud)

或者,如果要使用具有相同名称的参数,则可以通过使用static类名对其进行限定来指定使用类变量:

static void changeIt(int size) {
    Foo.size = size;
    System.out.println("size in changeIt is " + Foo.size);
}
Run Code Online (Sandbox Code Playgroud)