2012-12-07 5 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 문으로 이동한다는 것입니다.if 문에 오류가 있습니까?

그러나 내가 에서 읽는 fileArray ArrayList는에 벨 문자 (ASCII 문자 # 7)가 포함되어 있습니다. 다음과 같이 fileArray을 선언했습니다 : ArrayList <Character> fileArray = new ArrayList <Character>();.

+0

봅니다 루프 –

답변

3

만들기 new Character((char) 7))은 불필요한 개체 생성처럼 보입니다. 따라서

시도해보십시오. 당신의 fileArray.get(i)이 null이 아님을 확인하십시오.

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

==는 java에서 참조 평등입니다 (두 개의 참조가 동일한 객체가 아닌 동일한 객체를 참조하는지 확인). 대신 fileArray.get(i).equals(...)을 사용하십시오.

+1

전에') (.equals'와 원시적 형'char'의 두 인스턴스를 비교 할 수는 fileArray의 크기를 인쇄합니다. – 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

을 그 다음은 중괄호 누락 전체 방법입니다 경우. 또한 문자열을 비교할 때 equals를 사용해야합니다. 그렇지 않으면 문자열 내용이 아닌 비트 단위로 검사합니다.

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 
     } 
    } 
}