0

我已经读过“如果有另一个同名的变量在范围内更接近,则一个变量将被隐藏”。我以构造函数为例找到了这个 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"。我误解了阴影变量的定义吗?

4

2 回答 2

5

我认为构造函数中的“x = x”就像“23 = 23”。

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

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

this.x = x;

(当然,同样适用于y。)

于 2014-05-02T16:24:57.877 回答
0

0int类型变量的默认值,正如警告所说,您在构造函数中隐藏变量,因此永远不会分配对象变量。

public Point(int x, int y) {
    x = x; //assign value of local x to local x
    y = y; //assign value of local y to local y
}

您需要使用this关键字来引用对象变量xy不是局部变量:

public Point(int x, int y) {
    this.x = x; //assign value of local x to object variable x
    this.y = y; //assign value of local y to object variable y
}
于 2014-05-02T16:26:19.477 回答