Nand 到俄罗斯方块:字符串相等性测试不起作用

Nand to Tetris: string equality test isn't working

这是输出 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" 都是对象,而 = 测试每个对象的起始地址是否相同( in Jack , 相等性是用单个等号来测试的,而不是双等号或三等号)。我还没有读到第 10/11 章,届时我会发现这个假设是否正确。

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

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