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 比较的是对象引用,而不是它的值。
我认为方法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 比较的是对象引用,而不是它的值。