java中的局部变量和类变量的行为

Bha*_*wan 5 java static class-level

我是Java编程语言的新手.
我熟悉C和C++,但无法理解下面程序的行为.

public class Test {
    static int x = 11;
    private int y = 33;
    public void method1(int x) {
        Test t = new Test();
        this.x = 22;
        y = 44;    
        System.out.println("Test.x: " + Test.x);
        System.out.println("t.x: " + t.x);
        System.out.println("t.y: " + t.y);
        System.out.println("y: " + y);
    }    
    public static void main(String args[]) {
        Test t = new Test();
        t.method1(5);
    }
}
Run Code Online (Sandbox Code Playgroud)

正确的输出:

Test.x: 22
t.x: 22
t.y: 33
y: 44
Run Code Online (Sandbox Code Playgroud)

预期产量:

Test.x: 22
t.x: 22
t.y: 44   // As variable y is modified inside the function.
y: 44
Run Code Online (Sandbox Code Playgroud)

即使从转产y = 44;this.y = 44;没有给出预期输出.

Sur*_*tta 1

问题是您没有引用创建的实际对象。您正在从具有新变量的其他实例引用该变量。

        Test t = new Test();
        this.x = 22;
        y = 44;

        System.out.println("Test.x: " + Test.x);
        System.out.println("t.x: " + t.x);
        System.out.println("t.y: " + t.y);
        System.out.println("y: " + y);
Run Code Online (Sandbox Code Playgroud)

如果你仔细观察第一行Test t = new Test();

您没有在 y 分配给 44 的特定实例上调用 method1。因此您看到的是顶级值。

如果你重命名你的实例会更清楚。而不是t总是。

这就是造成混乱的原因,而且,您method1()在内部调用可能会导致无限循环。