2016-06-02 2 views
-1

方法Aは「OK」と表示されますが、実際には「失敗」と表示されると思います。方法Bは、正しい結果「OK」を得ることができる。"/"を含む文字列はアンドロイドで比較できませんか?

私は関数fi.iki.elonen.NanoHTTPD.getMimeTypeForFile("my.css")が結果 "text/css"を返すと確信しています。

なぜメソッドAが正しい結果を得ることができないのか分かりません。関数fi.iki.elonen.NanoHTTPD.getMimeTypeForFileにいくつかのバグはありますか?

ところで、方法Cは正しい結果「OK」を得ることができます。方法Aでは

方法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

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

予想通り、それは、[OK]をもたらす(と比較使用して)それらに同じテキスト(MIMEタイプ)を含むとしてもOKになります。

+0

ありがとうございます!実際にはメソッド2は "OK"と表示されます – HelloCW

+0

ああ、実際に私はあなたのメソッドが返されたものを考慮しませんでした..更新 – cafebabe1991

1

、あなたは "== bを" 判断これは、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はその値ではなくオブジェクト参照を比較しています。

関連する問題