2012-12-05 104 views
0

此代碼與「Learning Java(Oracle Press Books)」一書中的內容完全相同,但不起作用。我不明白爲什麼它不起作用,它應該工作。我用OpenJDK和Sun JDK 7都試過了,錯誤是一樣的。Java意外類型正在進行字符串比較,奇怪

ThreadCom.java:56: error: unexpected type 
    if (thrd.getName().compareTo("Tick") = 0) { 
           ^
    required: variable 
    found: value 
1 error 

有問題的代碼...

class MyThread implements Runnable { 
    Thread thrd; 
    TickTock ttOb; 

    MyThread(String name, TickTock tt) { 
      thrd = new Thread(this, name); 
      ttOb = tt; 
      thrd.start(); 
    } 

    public void run() { 
      if (thrd.getName().compareTo("Tick") = 0) { // <- that line 
        for (int i=0; i<5; i++) ttOb.tick(true); 
        ttOb.tick(false); 
      } else { 
        for (int i=0; i<5; i++) ttOb.tock(true); 
        ttOb.tock(false); 
      } 
    } 
} 

代碼正是因爲它是在書。

+0

提示:當編譯器會發出警告/錯誤,交換JDK是關於* *最後選擇嘗試。因爲你錯了,所以很有可能*編譯器是正確的。並且*不適用於初學者,適用於所有人;-) –

回答

5

thrd.getName().compareTo("Tick") = 0 

應該

thrd.getName().compareTo("Tick") == 0 

第一是分配。第二個是比較。

+0

我習慣於C++,其中兩者都適用。什麼是一個任務在做一個if?有什麼你可以在Java中做的事情是通過能夠將任務放入if中而獲得的嗎?這種語言的設計讓我感到困惑。 –

3

我忘了雙等號,剛注意到它。

if (thrd.getName().compareTo("Tick") = 0) 

應該

if (thrd.getName().compareTo("Tick") == 0)