实例变量如何影响此处的构造函数的值?

时间:2018-11-13 17:05:22

标签: java variables constructor

我正在通过Java练习,对最后4行代码的新值有些困惑。

public class Snake {
    public Snake x = null;
    public Snake y = null;

    public static void main(String[] args) {
        Snake a = new Snake();
        Snake b = new Snake();
        a.x = a;
        b.x = a.x;
        b.y = b.x;
        a.y = b.y.x;
    }
}

2 个答案:

答案 0 :(得分:1)

然后,您知道ab是两条蛇。但它们实际上是指两种不同的蛇。

a.x = a:表示使a.x引用a所引用的蛇。

b.x = a.x:表示使b.x引用a.x所指的蛇(与a相同)。

b.y = b.x:表示使b.y引用b.x所指的蛇(与a相同)。

a.y = b.y.x:表示使a.y指代b.y.x所指的蛇,因为b.y指代a,这指代a.xa相同。

答案 1 :(得分:0)

它是这样工作的:

a.x = a;

x Snake对象的a Snake对象(属性)成为对a Snake对象本身的引用(指向)。

b.x = a.x;

x Snake对象的b Snake对象(属性)成为对a.x Snake对象的引用(点),该对象先前被设置为引用{{1} } Snake对象。
因此,这个a也成为b.x Snake对象的引用(点)。

a

b.y = b.x; Snake对象的y Snake对象(属性)成为对b Snake对象的引用(点),该对象先前被设置为引用{{1} } Snake对象。
因此,这个b.x也成为a Snake对象的引用(点)。

b.y

a Snake对象的a.y = b.y.x; Snake对象(属性)成为y Snake对象的引用(点),并且由于a先前已设置为{ {1}}等效于先前设置为引用b.y.x Snake对象的b.y
因此,这个a也成为a.x Snake对象的引用(点)。

最后:分配的所有左侧部分(指向)指向a