语言环境.setDefault影响Locale.getDefault.getCountry



以下代码的输出

Locale.setDefault(new Locale("fr"));
System.out.println("Start");
System.out.println(Locale.getDefault().getCountry());
System.out.println("End");

Start
End

而这段代码的输出

//Locale.setDefault(new Locale("fr"));
System.out.println("Start");
System.out.println(Locale.getDefault().getCountry());
System.out.println("End");

Start
US
End

我很好奇为什么将默认语言设置更改为法语的第一个代码块的输出结果为一个空字符串作为Locale.getDefault().getCountry()的输出

根据文档:

java.util.Locale是一个轻量级对象,只包含几个重要的成员:

  • 语言代码
  • 可选的国家或地区代码
  • 可选的变体代码

当您使用构造函数创建类Locale的实例时,您创建了一个使用法语的区域设置,而没有指定国家或变体。

接下来将您创建的区域设置传递给setDefault方法。因此,从那时起,您的默认区域设置为法语,没有国家或变体。

Locale.setDefault不允许只设置默认语言。你总是设置整个Locale对象。

要解决您的问题,您可以首先从默认区域设置中获取国家代码,然后使用法语和默认国家创建区域设置:

String defaultCountryCode = Locale.getDefault().getCountry();
Locale.setDefault(new Locale("fr", defaultCountryCode));
System.out.println("Start");
System.out.println(Locale.getDefault().getCountry());
System.out.println("End");

得到

Start
US
End

也使用国家代码,例如new Locale("fr", "FR")。这很重要,因为同一种语言可以在多个国家使用,例如法语在许多国家使用。

import java.util.Locale;
class Main {
public static void main(String[] args) {
Locale.setDefault(new Locale("fr", "FR"));
System.out.println("Start");
System.out.println(Locale.getDefault().getCountry());
System.out.println(Locale.getDefault().getDisplayCountry());
System.out.println("End");
}
}

输出:

Start
FR
France
End

查看教程,创建区域了解更多关于它的信息。

第二个代码片段输出国家名称,因为它是从默认系统设置中获取此信息的。

最新更新