我正在通过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;
}
}
答案 0 :(得分:1)
然后,您知道a
和b
是两条蛇。但它们实际上是指两种不同的蛇。
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.x
与a
相同。
答案 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
。