Android Studio中Locale.getDefault().getLanguage()失效问题求助
问题分析与解决方案
嘿,这个问题我太熟悉啦!你的代码里的核心问题出在字符串比较的方式上。
在Java中,==运算符比较的是两个字符串对象的内存引用地址,而不是字符串的实际内容。Locale.getDefault().getLanguage()返回的是一个新的字符串对象,和你写的字面量"de"、"fr"虽然内容相同,但引用地址可能不一样,所以条件判断永远不会触发,只会走到最后的else分支。
修正后的代码
把==换成equals()方法(或者更严谨的equalsIgnoreCase(),避免大小写问题)就可以解决啦:
String lang = Locale.getDefault().getLanguage(); // 变量名建议小写,符合Java命名规范 if("de".equals(lang)) { Log.i("de", "de"); } else if("fr".equals(lang)) { Log.i("fr", "fr"); } else { Log.i("en", "en"); }
额外小建议
- 把字面量放在
equals()前面是个好习惯,这样即使lang是null也不会抛出NullPointerException - 如果需要支持更多语言,建议用
switch语句(Java 7及以上支持字符串switch),代码会更整洁:
String lang = Locale.getDefault().getLanguage(); switch(lang) { case "de": Log.i("de", "de"); break; case "fr": Log.i("fr", "fr"); break; default: Log.i("en", "en"); break; }
内容的提问来源于stack exchange,提问作者KainAlive
相关产品推荐
相关产品推荐

