我已经读过“如果变量的作用域更近,则该变量将被遮盖”。我发现此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” 。我是否误解了阴影变量的定义?
我认为构造函数中的“ x = x”将类似于“ 23 = 23”。
在构造函数中,简单名称的含义x是 永远 只是参数。因此,分配x = x在构造函数中取的值x参数,并将其分配 到 的x参数也是如此。实例变量永远不会被触及。(尚不清楚您的意思是什么23 = 23;,所以我无法确定这是否正确。)基本上,这是一个禁忌,有些IDE会警告您。
x
x = x
23 = 23;
要强制将其复制到实例变量,您需要:
this.x = x;
(y当然也是如此)
y