小编典典

用Java中的局部变量遮盖实例变量

java

我已经读过“如果变量的作用域更近,则该变量将被遮盖”。我发现此Point类带有一个构造函数作为示例:

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

    public Point(int x, int y) {
        x = x;
        y = y;
    }
}

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

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

    Point originOne = new Point(23, 94);

    System.out.println(originOne.x);

    }

}

运行编译器后,它显示0。但是为什么不显示23?我认为构造函数中的 “ x = x” 将类似于 “ 23 = 23”
。我是否误解了阴影变量的定义?


阅读 253

收藏
2020-11-30

共1个答案

小编典典

我认为构造函数中的“ x = x”将类似于“ 23 = 23”。

在构造函数中,简单名称的含义x永远 只是参数。因此,分配x = x在构造函数中取的值x参数,并将其分配
x参数也是如此。实例变量永远不会被触及。(尚不清楚您的意思是什么23 = 23;,所以我无法确定这是否正确。)基本上,这是一个禁忌,有些IDE会警告您。

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

this.x = x;

y当然也是如此)

2020-11-30