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" 在堆上动态创建一个字符串,并且您的代码将比较堆上的两个不同地址。比较将是错误的。
我怎么知道的?我刚写完编译器...
这是输出 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"
都是对象,而 =
测试每个对象的起始地址是否相同(
抱歉回答晚了,但它来了。您的程序将为每次出现的 "bar" 在堆上动态创建一个字符串,并且您的代码将比较堆上的两个不同地址。比较将是错误的。
我怎么知道的?我刚写完编译器...