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;没有给出预期输出.
问题是您没有引用创建的实际对象。您正在从具有新变量的其他实例引用该变量。
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()在内部调用可能会导致无限循环。
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |