android不能比较包含“/”的字符串?

The string contain "/" can't be compared in android?

我认为方法A会显示"Ok",但实际上显示"Fails"。方法B可以得到正确的结果"OK".

我确定函数 fi.iki.elonen.NanoHTTPD.getMimeTypeForFile("my.css") 会 return 结果 "text/css"。

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

顺便说一句,方法C可以得到正确的结果"OK"。

方法一

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");
    }

在方法 A 中,您判断 "a==b" 这意味着 a 具有与 b.Obviously 相同的引用,它们的引用不同。

Method 1

结果为 "Fails" 这是因为当您使用 == 时,会比较堆上的实际对象 参考:Detailed explanation

Method 2

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

Method 3

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

因为,在A的情况下,"if(a == b)",a是内存地址,同样,b是内存地址,当然不一样了! 在 B 的情况下,你比较 a & b 的价值!所以他们是一样的。

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

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

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

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