2010-08-26 1 views
10

У меня есть приложение для Android, где я хочу проверить, соответствует ли установленное имя приложения строке, переданной функции, содержащей этот код. Код и пример ниже:Почему сравнение строк в String отсутствует?

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

ответ

41

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

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

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

+1

А я вижу. Это определенно ошибка, которую совершил этот новичок. Благодарю. –

5

Заканчивать номер 7: Top 10 - New Java Developer Errors

+0

Хотя это теоретически может ответить на вопрос, [было бы предпочтительно] (http://meta.stackexchange.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки. –

+0

@JoachimSauer Итон уже достаточно ответил на вопрос, я предоставлял дополнительную информацию. Возможно, это должен был быть комментарий – Blundell

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; 
} 
Смежные вопросы