preference.getKey.equals()返回false

时间:2016-06-30 23:12:14

标签: java android

我使用PreferenceActivity并实施onPreferenceChange方法。 我正在检查哪些首选项已更改,因此我可以对其进行操作,但.equals()方法仍会返回false。我调试了应用程序,它显示两个字段都返回字符串student_id。我错过了什么吗? 此时,更改来自student_id_key首选项更改

来自strings.xml

<string name="student_id_key" translatable="false">student_id</string>

onPreferenceChange

中的代码
 if(preference.getKey().equals(preference.getContext().getString(R.string.student_id_key))){
            //do something here, but its returning false
        }

这是调试器的快照,将x和y显示为两个字符串 enter image description here

我已尝试使用==,但结果相同 enter image description here

这是我的prefs.xml

中元素的摘录
  <EditTextPreference
    android:capitalize="words"
    android:defaultValue="@string/student_id_default"
    android:inputType="textCapWords"
    android:hint="@string/student_id_hint"
    android:key="@string/student_id_key"
    android:maxLines="1"
    android:maxLength="9"
    android:selectAllOnFocus="true"
    android:singleLine="true"
    android:title="@string/pref_title_display_name" />

1 个答案:

答案 0 :(得分:3)

使用字符串比较,总是使用.equals,因为==永远不会(很少,除非你将相同的变量与自身进行比较)才能用于字符串,因为它们是不可变的。

编辑: 所以,我认为这是因为你没有该块内的代码(或任何重要的代码)。在该块中添加print语句并查看是否打印。编译器优化了死代码,因此它可能会让你觉得奇怪的事情发生时却确实没有。将equals check输入一个布尔值,看看它是如何计算的。