2013-02-11 96 views
0

我遇到了這段代碼的問題。第6行的if語句在執行過程中被忽略。此時我已經通過了代碼,變量文件[position]的值是「subjects.dat」。然而,它正在跳過這個步驟並轉到相關的else語句。任何想法爲什麼?如果在執行過程中語句被跳過

dialogButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       if (markComplete.isChecked()) { 
        String toDelete; 
        String[] files = fileList(); 
        if (files[position] == "subjects.dat") { //the error occurs at this line 
         toDelete = files[position + 1]; 
         boolean deleted = deleteFile(toDelete); 
         if (deleted) { 
          dialog.dismiss(); 
         } else { 
          // Do nothing 
         } 
        } else {        
         toDelete = files[position];      
         boolean deleted = deleteFile(toDelete); 
         if (deleted) { 
          dialog.dismiss(); 
         } else { 
          //Do nothing 
         } 
        } 

       }     
      } 

謝謝!

+1

,因爲它被評價爲假的字符串比較沒有這樣做方式 – njzk2 2013-02-11 16:49:11

+0

@RyanThames isEquals()???你的意思是等於()? – PermGenError 2013-02-11 16:53:18

+0

這可能是最常見的java錯誤之一,以及'if(var = 2)';) – nicopico 2013-02-11 16:53:50

回答

6

您需要使用.equals()來比較兩個字符串的實際值 - 否則您正在檢查它們是否是同一個對象。

if (files[position].equals("subjects.dat")) { 
    // do stuff 
} 
+2

你的意思是'equals()'? – 2013-02-11 16:48:45

+0

@RohitJain哎呀,修好了。 – thegrinner 2013-02-11 16:49:39

1

總是用equals() method檢查字符串相等。 ==運算符如果兩個refrenece變量指向同一個對象。

1

字符串是java中的對象,當您使用「==」時,您會比較通常不同的引用(指針)(通常是因爲對短字符串進行了一些優化)。長話短說,使用

string.equals(anotherString) 

代替

string == anotherString 
0

字符串 - 用.equals()。 ==永遠不會讓你真實,因爲對象是不同的。

代替 文件[位置] ==「subjects.dat」 使用 文件[位置] .equals(「subjects.dat」)