Почему сравнение 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 одна из самых распространенных ошибок, встречающихся новичками, использует == для сравнения строк. Вы должны помнить, == сравнивает ссылки на объекты, а не содержимое.

Ответ 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;
}