android中最终静态字段的值是否会发生变化?

时间:2017-08-16 07:15:40

标签: android

我正在研究SharedPreferences,在我的程序中,我有一个最终的静态变量,每个变量都是名称和电子邮件

 public static final String PREF_NAME = "name";
 public static final String PREF_EMAIL = "email";

初始化我的SharedPreferences对象后,

  SharedPreferences sPref = this.getSharedPreferences("com.vivid.sharedprefrences",Context.MODE_PRIVATE);

I通过用户输入的名称和电子邮件替换它们来更改常量字段的值

 sEditor.putString(PREF_NAME,name);
    sEditor.putString(PREF_EMAIL,email);
    sEditor.commit();

但是根据堆栈溢出的其他答案a static final variable value cannot be changed once initialized 但是,当我将名称和电子邮件插入PREF_NAMEPREF_EMAIL时,静态最终字段的值会发生变化 怎么可能?

3 个答案:

答案 0 :(得分:0)

它是一个sharedPrefence键,所以基本上你是在改变键而不是静态最终变量

的值

答案 1 :(得分:0)

执行此操作sEditor.putString(PREF_EMAIL,email);时,第一个参数是键而不是值。因此,根据您的偏好,为KEY PREF_EMAIL保存电子邮件的价值。

因此关键永远不会改变。您的共享偏好是Key-ValuePair种类的集合。字符串PREF_EMAIL的值是您在行中定义的内容 - public static final String PREF_EMAIL = "email";,即电子邮件,并且始终保持不变。

使用标识符键保存的首选项值PREF_EMAIL会发生变化。

因此您的共享偏好设置将保存为 -

email = "email@sample.com" //这只是一个示例表示。

答案 2 :(得分:0)

将此两项功能用于设置获取您的姓名和值的值电子邮件

private static String SHARED_PREFERENCE ="your.package.name";

public static void setNameValue(Context c, String value) {
    SharedPreferences sp = c.getSharedPreferences(SHARED_PREFERENCE, 0);
    SharedPreferences.Editor editor = sp.edit();
    editor.putString("name", value);
    editor.commit();
}

public static String getNameValue(Context c) {
    SharedPreferences sp = c.getSharedPreferences(SHARED_PREFERENCE, 0);
    return sp.getString("name", "");
}

然后只需调用那些函数demo.setNameValue(context,"your_name_from_edittext");

您可以为电子邮件和其他字段执行相同操作