gpt4 book ai didi

java - 内部类实例变量遮蔽

转载 作者:行者123 更新时间:2023-11-30 03:16:24 25 4
gpt4 key购买 nike

目前,我正在做 Oracle 的嵌套类教程,在影子部分我有一些我根本不理解的东西。

方法methodInFirstLevel的第二行执行代码打印出this.x的值,但在main方法中我们已经将参数23传递给了新对象实例的方法的参数。那么为什么 FirstLevelint x 仍然回到 1 呢? this 关键字不应该引用对象实例吗?

public class ShadowTest {

public int x = 0;

class FirstLevel {

public int x = 1;

void methodInFirstLevel (int x) {
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);
}
}

public static void main(String[] args) {
ShadowTest st = new ShadowTest();
ShadowTest.FirstLevel f1 = st.new FirstLevel();
f1.methodInFirstLevel(23);
}

}

输出为:

x = 23
this.x = 1
ShadowTest.this.x = 0

最佳答案

该代码块中没有发生任何分配。

void methodInFirstLevel (int x) {
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);
}

参数 x 从未分配给 this.x 或 ShadowTest.this.x ,因此两个值保持相同。

要将 this.x 值更改为 23,您必须将其设置为

this.x =x;

关于java - 内部类实例变量遮蔽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32472474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com