2016-06-02 3 views
-1

나는 방법 A가 "Ok"를 표시 할 것이라고 생각하지만 실제로 "실패"라고 표시합니다. 방법 B는 "OK"라는 올바른 결과를 얻을 수 있습니다."/"가 포함 된 문자열은 android에서 비교할 수 없습니까?

나는 fi.iki.elonen.NanoHTTPD.getMimeTypeForFile("my.css") 함수가 "text/css"라는 결과를 반환 할 것이라고 확신한다.

방법 A가 올바른 결과를 얻을 수없는 이유를 이해할 수 없습니다. 이 함수에 버그가 있습니까? fi.iki.elonen.NanoHTTPD.getMimeTypeForFile?

현재 방법 C는 올바른 결과 "OK"를 얻을 수 있습니다.

방법 A

String a="text/css"; 
String b= fi.iki.elonen.NanoHTTPD.getMimeTypeForFile("my.css"); 

Utility.LogError("B: "+b); 

if (a==b){ 
    Utility.LogError("Ok"); 
}else{ 
    Utility.LogError("Fails"); 
} 

방법 B는

String a="text/css"; 
    String b= fi.iki.elonen.NanoHTTPD.getMimeTypeForFile("my.css"); 

    Utility.LogError("B: "+b); 

    if (a.compareTo(b)==0){ 
     Utility.LogError("Ok"); 
    }else{ 
     Utility.LogError("Fails"); 
    } 

방법 C 방법 A의

String a="text/css"; 
    String b= "text/css"; 

    Utility.LogError("B: "+b); 

    if (a==b){ 
     Utility.LogError("Ok"); 
    }else{ 
     Utility.LogError("Fails"); 
    } 

답변

2

이 방법은 1 그것은 결과

에 "실패" 그것은 당신이 == 참조 사용할 때 힙의 실제 개체를 비교하기 때문에 : Detailed explanation

방법 2

A 및 B는

방법 3

예상대로, 확인 결과 (비교하여) 이들의 동일한 텍스트 (MIME 타입)를 포함 같이 확인을 초래한다.

+0

감사! 하지만 실제로 방법 2 표시 "확인" – HelloCW

+0

오, 그래, 사실 당신의 방법이 반환 된 고려하지 않았다 .. 업데이트 – cafebabe1991

1

경우의 "== 된 B"를 판단 이는 a가 b와 동일한 참조를 갖는 것을 의미합니다. 분명히 그들의 참조는 다릅니다.

1

Beacause 경우 A에서 "if (a == b)"는 a와 같은 메모리 주소이고 b는 메모리 주소입니다. 물론 동일하지 않습니다! 그리고 B 경우에는 & b 값과 비교하십시오! 그래서 그들은 동일합니다.

0

Java에서 문자열을 비교하려면 equals()를 사용해야합니다.

String a = "abc"; 
String b = "abc"; 

if(a.equals(b)) { 
// true! 
} 

==를 사용하면 java는 값이 아닌 개체 참조를 비교합니다.