2017-01-02 75 views
0

這是輸出false而不是true。爲什麼是這樣?Nand到俄羅斯方塊:字符串相等測試不起作用

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章,那時候我會發現這個假設是否屬實。

+0

我再次刪除了我以前的答案。如果單個等號是有效的,那麼你的假設似乎是正確的,有兩個表示字符串。 –

+0

@OliverHader好的,謝謝。 –

回答

1

對不起,遲到的答案,但它來了。你的程序會在每次出現「bar」時動態地在堆上創建一個字符串,你的代碼將比較堆上的兩個不同的地址。比較將是錯誤的。

我如何知道?我剛寫完編譯器......