我认为方法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");
}
答案 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正在比较对象引用,而不是它的值。