Почему не удается сравнить строки со строками?

У меня есть приложение для 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 . Однако этого никогда не происходит. Я зарегистрировал результаты, и они должны совпадать, но это не так. Может ли кто-нибудь объяснить мне, почему это не работает?

10
задан Joachim Sauer 6 June 2013 в 13:49
поделиться

2 ответа

Используйте метод String equals() вместо оператора == для сравнения строк:

info.activityInfo.applicationInfo.loadLabel( pm ).toString().equals(appName)

Одной из наиболее распространенных ошибок, с которыми сталкиваются новички в Java, является использование == для сравнения строк. Вы должны помнить, что == сравнивает ссылки на объекты, а не содержимое.

42
ответ дан 3 December 2019 в 13:29
поделиться
5
ответ дан 3 December 2019 в 13:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: