Android 应用程序语言环境变量与字符串的比较

Android app Locale variable comparison with String

我目前正在尝试测试(使用 if 语句)当前 Locale 变量的值。

但返回的结果(通过调试模式检查)是错误的。

这是我正在使用的代码:

Locale frLocale = new Locale("fr");
Locale usLocale = new Locale("en");
Locale currentLocale = Locale.getDefault();

Toast.makeText(this, frLocale.toString(), Toast.LENGTH_SHORT).show();
Toast.makeText(this, usLocale.toString(), Toast.LENGTH_SHORT).show();
Toast.makeText(this, currentLocale.getLanguage().toString(), Toast.LENGTH_SHORT).show();

if (currentLocale.getLanguage().toString() == "fr") {
     currentLocale.setDefault(usLocale);
     Toast.makeText(this, "Toto", Toast.LENGTH_SHORT).show();
     Toast.makeText(this, currentLocale.getLanguage().toString(), Toast.LENGTH_SHORT).show();
}

Toast 可以帮助我检查(没有调试模式)返回的值是什么。

我很惊讶,因为:

    我的
  1. currentLocale.getLanguage().toString() 如果 returns "fr"

你觉得我的做法有问题吗?

如果要比较非原始数据类型,请使用 equals 方法进行比较。

尝试以下解决方案:

private static final LOCATE_TEXT="fr";

Locale frLocale = new Locale(LOCATE_TEXT);
Locale usLocale = new Locale("en");
Locale currentLocale = Locale.getDefault();

Toast.makeText(this, frLocale.toString(), Toast.LENGTH_SHORT).show();
        Toast.makeText(this, usLocale.toString(), Toast.LENGTH_SHORT).show();
        Toast.makeText(this, currentLocale.getLanguage().toString(), Toast.LENGTH_SHORT).show();
if(currentLocale.getLanguage().toString().equals(LOCATE_TEXT)){
            currentLocale.setDefault(usLocale);
            Toast.makeText(this, "Toto", Toast.LENGTH_SHORT).show();
            Toast.makeText(this, currentLocale.getLanguage().toString(), Toast.LENGTH_SHORT).show();
        }

字符串比较是同时使用==和equals方法的常见场景。由于java.lang.Stringclass覆盖了equals方法,它return 如果两个 String 对象包含相同的内容则为真,但是 == 只有 return 如果两个引用指向同一个对象则为真。