使用Java中的局部变量隐藏实例变量

0 java oop variables shadowing

我已经读过"如果另一个具有相同名称的变量在范围上更近,则变量被遮蔽".我发现这个Point类以构造函数为例:

public class Point {
    public int x = 0;
    public int y = 0;

    public Point(int x, int y) {
        x = x;
        y = y;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我在下面的CreateObjectDemo类中创建了Point类的对象,并打印了变量x的值.

public class CreateObjectDemo {
    public static void main(String[] args) {

    Point originOne = new Point(23, 94);

    System.out.println(originOne.x);

    }

}
Run Code Online (Sandbox Code Playgroud)

运行编译器后,它打印0.但为什么不打印23?我认为构造函数中的"x = x"就像"23 = 23".我是否误解了阴影变量的定义?

Jon*_*eet 5

我认为构造函数中的"x = x"就像"23 = 23".

在构造函数中,简单名称的含义x永远只是参数.因此,分配x = x在构造函数中取的值x参数,并将其分配x参数也是如此.永远不会触及实例变量.(目前还不清楚你的意思23 = 23;,所以我不知道这是否准确.)基本上,这是一个无操作,一些IDE会给你一个警告.

要强制它复制到实例变量,您需要:

this.x = x;
Run Code Online (Sandbox Code Playgroud)

(y当然也是如此.)