2012-12-07 151 views
1
public void decompressTo(String fileName) throws IOException { 

    for (int i = 0; i < fileArray.size(); i++) { 
     if (fileArray.get(i) == new Character((char) 7)) { 
      //do stuff 
    } 
    else { 
     //do other stuff 
    } 
} 

問題是我的if語句永遠不會被執行,相反,for循環總是跳轉到else語句。如果陳述有問題?

但是,我正在從讀取的fileArray確切的ArrayList包含響鈴字符(ASCII字符#7)。我宣佈fileArray如下:ArrayList <Character> fileArray = new ArrayList <Character>();

+0

嘗試打印fileArray的大小,循環 –

回答

3

創建new Character((char) 7))似乎不必要的對象創建。因此

試試這個。讓你的fileArray.get(i)不爲空。

if (fileArray.get(i).charValue() == '7') 
5

==是java中的引用相等(檢查兩個引用是否引用同一個對象,而不是兩個相等的對象)。改爲使用fileArray.get(i).equals(...)

+1

之前,你不能用'.equals基本類型'char'的兩個實例比較()'。 – Zwischenzug

+0

但是你正在比較字符 – Subin

+0

@ user1744094我不確定你是否認爲'Character's是'char's,或者你是否暗示我應該在原始類型上留下'=='行爲的註釋一般來說。 – Cubic

3

你聲明:

if (fileArray.get(i) == new Character((char) 7)) 

將永遠false作爲==檢查相同的對象。

試試這個:

if (fileArray.get(i).equals(new Character((char) 7))) 
2

如果是整個方法,然後你缺少一個大括號。還要確保在比較字符串時使用等於,否則您按位查詢而不是字符串內容。

public void decompressTo(String fileName) throws IOException { 

    for (int i = 0; i < fileArray.size(); i++) { 
     if (fileArray.get(i).equals(new Character((char) 7))) { 
      //do stuff 
     } else { 
      //do other stuff 
     } 
    } 
}