Nand to Tetris:字符串相等测试不起作用

时间:2017-01-02 21:18:21

标签: nand2tetris

这是输出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;
  }
}

我怀疑这是因为foo"bar"都是对象,而=测试每个对象的起始地址是否相同(杰克中的note that,相等用单个等于而不是双等或三等于测试。我还没有完成第10/11章,这时我会发现这个假设是否属实。

1 个答案:

答案 0 :(得分:1)

对于迟到的回答感到抱歉,但是来了。您的程序将在堆上动态创建一个字符串,用于每次出现" bar"并且您的代码将比较堆上的两个不同地址。比较将是错误的。

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