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 可以帮助我检查(没有调试模式)返回的值是什么。
我很惊讶,因为:
我的 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 如果两个引用指向同一个对象则为真。
我目前正在尝试测试(使用 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 可以帮助我检查(没有调试模式)返回的值是什么。
我很惊讶,因为:
-
我的
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 如果两个引用指向同一个对象则为真。