【问题标题】:How do the instance variables effect the values of my constructors here?实例变量如何影响我的构造函数的值?
【发布时间】:2018-11-13 17:05:22
【问题描述】:

我正在做一个 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;
    }
}

【问题讨论】:

  • 你只是有一个具有指向对象本身的属性的对象......这有点像无穷大的开始:-)
  • 到最后,A 和 B 的 X 和 Y 字段都等于 A。编写此练习的人是个白痴。这就像试图用"how much wood would a woodchuck chuck" 教别人英语

标签: java variables constructor


【解决方案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引用的snake,因为b.y引用a,这引用a.x,与a相同。

【讨论】:

    【解决方案2】:

    这就是它的工作原理:

    a.x = a;
    

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

    b.x = a.x;
    

    b Snake 对象的x Snake 对象(属性)成为对a.x Snake 对象的引用(指向),该对象之前被设置为引用a Snake 对象。
    所以这个b.x 也成为a Snake 对象的引用(指向)。

    b.y = b.x;
    

    b Snake 对象的y Snake 对象(属性)成为对b.x Snake 对象的引用(指向),该对象之前被设置为引用a Snake 对象。
    所以这个b.y 也成为a Snake 对象的引用(指向)。

    a.y = b.y.x;
    

    a Snake 对象的y Snake 对象(属性)成为b.y.x Snake 对象的引用(指向),并且由于b.y 先前设置为a,因此它等效于@987654345 @ 之前设置为引用 a Snake 对象。
    所以这个a.y 也成为a Snake 对象的引用(指向)。

    最后:作业的所有左侧部分都引用(指向)a

    【讨论】:

      猜你喜欢
      • 2014-01-12
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      相关资源
      最近更新 更多