【问题标题】:== and .equals() not working in java [duplicate]== 和 .equals() 在 java 中不起作用 [重复]
【发布时间】:2016-06-24 07:36:31
【问题描述】:

所以我试图比较 PackageInfo 和 ApplicationInfo 中的字符串,并在 Android Studio 中检索它们的包名。

    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
    List<PackageInfo> apps = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS);

            for (PackageInfo app : apps)
                for(ApplicationInfo packageInfo:packages)
                        String packageName = packageInfo.packageName;
                        String sysName = app.packageName;

                        if (packageName != sysName)
                        {
                            Log.d("", "NOPE DOESNT MATCH");
                            break;
                        }
                        if (packageName.equals(sysName.toString())) ;
                        {
                            Log.d("", "IT MATCHES");
                        //do something after that

所以问题来了,当我在调试模式里面看到时,他们实际上有相同的字符串

调试模式示例:

com.android.quicksearchbox

com.android.quicksearchbox

返回“NOPE DOESNT MATCH

我真的很好奇为什么会发生这种情况,我尝试了其他形式,例如修剪,以消除之间的空白,不,它仍然没有返回“IT MATCHES”,有人可以帮忙吗?

谢谢。

【问题讨论】:

  • != 您实际上是在比较可能不同的参考文献

标签: java android string android-studio package-managers


【解决方案1】:

替换:if (packageName != sysName)

与:if (!packageName.equals(sysName.toString()))

另外,;if 的末尾有一个不应该存在的;。 (这里:if (packageName.equals(sysName.toString())) ;

实际上,为了更好地形成你的条件,你应该有一个 if-else 块而不是 2 个 ifs。

类似:

if (packageName.equals(sysName.toString())){
    Log.d("", "IT MATCHES");
} else {
    Log.d("", "NOPE DOESNT MATCH");
}

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2015-07-19
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多