Почему сравнение String с String не удается?
У меня есть приложение для 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
. Однако этого никогда не происходит. Я зарегистрировал результаты, и он должен совпадать, но это не так. Кто-нибудь может рассказать мне, почему это не работает?
Ответы
Ответ 1
Используйте метод String equals() вместо оператора == для сравнения строк:
info.activityInfo.applicationInfo.loadLabel( pm ).toString().equals(appName)
В Java одна из самых распространенных ошибок, встречающихся новичками, использует ==
для сравнения строк. Вы должны помнить, ==
сравнивает ссылки на объекты, а не содержимое.
Ответ 2
Посмотрите номер 7: Топ 10 - Новые ошибки Java Developer
Ответ 3
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;
}