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".我是否误解了阴影变量的定义?
我认为构造函数中的"x = x"就像"23 = 23".
在构造函数中,简单名称的含义x是永远只是参数.因此,分配x = x在构造函数中取的值x参数,并将其分配到的x参数也是如此.永远不会触及实例变量.(目前还不清楚你的意思23 = 23;,所以我不知道这是否准确.)基本上,这是一个无操作,一些IDE会给你一个警告.
要强制它复制到实例变量,您需要:
this.x = x;
Run Code Online (Sandbox Code Playgroud)
(y当然也是如此.)