包含“/”的字符串无法在android中进行比较?

时间:2016-06-02 02:38:20

标签: android nanohttpd

我认为方法A将显示“确定”,但实际上它显示“失败”。方法B可以得到正确的结果“OK”。

我确信函数fi.iki.elonen.NanoHTTPD.getMimeTypeForFile("my.css")会返回结果“text / css”。

我不明白为什么方法A无法获得正确的结果。函数fi.iki.elonen.NanoHTTPD.getMimeTypeForFile是否有一些错误?

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

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

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

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

4 个答案:

答案 0 :(得分:2)

  

方法1

导致"失败" 这是因为当您使用== 时,会对堆上的实际对象进行比较 参考:Detailed explanation

  

方法2

结果为Ok,因为a和b中包含相同的文本(mime类型)(使用比较)

  

方法3

如预期的那样,结果是好的。

答案 1 :(得分:1)

在方法A中,您判断" a == b"这意味着与b具有相同的参考。显然,他们的参考不同。

答案 2 :(得分:1)

Beacause,在案例A中,“if(a == b)”,a是一个内存地址,同样,b是一个内存地址,当然它们不一样! 在案例B中,你比较一个& b的价值!所以他们是一样的。

答案 3 :(得分:0)

要比较Java中的字符串,必须使用equals()。

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

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

当你使用==时,java正在比较对象引用,而不是它的值。