Android new Locale(“en_US”) and Locale.US are different?
我只是在用常量值测试首选项中的区域设置时遇到了这个问题:
1
| (new Locale("en_US")).equals(Locale.US) == false |
当查看详细信息时,发现new Locale("en_us")返回的对象的语言代码为"en-us",国家代码为零长度字符串,而Locale.US返回的对象的语言代码为"en",国家代码为"us"。Locale("en","US")返回的结果与locale.us相同,因此很容易避免这个问题,但这是locale构造函数的预期行为吗?
- 这是错误的构造函数。单个参数定义语言,与预期的语言相比。使用区域设置(字符串语言、字符串国家)。
区域设置构造函数按预期工作。您可以这样比较区域设置对象:
(new Locale("en_US")).toString().equalsIgnoreCase((Locale.US).toString())
它会给你预期的价值
- getdefault()返回一个动态值,我将避免这种情况,因为它将在具有不同区域设置的设备上明确抛出异常。
- @班纳特:谢谢,改进了我的回答。
- 谢谢。这可能也解释了为什么新的区域设置("en_-us")将创建一个"有时"有效的区域设置,例如用这种方式测试特定区域设置的函数。