0

这是输出false而不是true. 为什么是这样?

class Main {
  function void main() {
    var String foo;
    let foo = "bar";

    if (foo = "bar") {
      do Output.printString("true");
    }
    else {
      do Output.printString("false");
    }

    return;
  }
}

我怀疑这是因为fooand"bar"是每个对象,并且=测试每个对象的起始地址是否相同(请注意,在 Jack 中,相等性是用单个等于测试的,而不是两个或三个等于)。我还没有读到第 10/11 章,那时我会发现这个假设是否正确。

4

1 回答 1

1

对不起,迟到的答案,但它来了。您的程序将为每次出现“bar”动态地在堆上创建一个字符串,并且您的代码将比较堆上的两个不同地址。比较将是错误的。

我怎么知道?我刚刚写完编译器...

于 2017-11-03T21:25:24.053 回答