我有一个Android应用,我想检查一下,安装的应用名称是否与传递给包含此代码的函数的字符串相匹配。代码和示例如下:
private Boolean checkInstalledApp(String appName){
PackageManager pm = this.getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0);
Boolean isInstalled = false;
for(ResolveInfo info: list) {
if (info.activityInfo.applicationInfo.loadLabel( pm ).toString()==appName){
isInstalled = true;
break;
}
}
return isInstalled;
}
假设您拨打了checkInstalledApp("SetCPU");
并且电话上的应用名称被称为相同的内容,则应该返回true
。但是,它永远不会。我记录了结果,它应该匹配,但它没有。任何人都可以告诉我为什么这不起作用?
答案 0 :(得分:42)
使用String的equals()方法代替==运算符来比较字符串:
info.activityInfo.applicationInfo.loadLabel( pm ).toString().equals(appName)
在Java中,新手遇到的最常见错误之一是使用==
来比较字符串。您必须记住,==
比较对象引用,而不是内容。
答案 1 :(得分:5)
答案 2 :(得分:0)
public static boolean compaireString (String string, String string2)
{
// string == null && String2 == null or they reference the same object
if (string == string2) return true;
//we have to be sure that string is not null before calling a methode on it
if (string != null && string.equals(string2)) return true;
return false;
}