diff -r 85c27aabf312 -r 3d17a524da95 src/java.base/share/classes/java/util/Locale.java --- a/src/java.base/share/classes/java/util/Locale.java Thu Feb 08 10:06:57 2018 -0500 +++ b/src/java.base/share/classes/java/util/Locale.java Thu Feb 08 18:45:30 2018 +0100 @@ -808,17 +808,26 @@ } static Locale getInstance(BaseLocale baseloc, LocaleExtensions extensions) { - LocaleKey key = new LocaleKey(baseloc, extensions); - return LOCALECACHE.get(key); + if (extensions == null) { + return LOCALECACHE.get(baseloc); + } else { + LocaleKey key = new LocaleKey(baseloc, extensions); + return LOCALECACHE.get(key); + } } - private static class Cache extends LocaleObjectCache { + private static class Cache extends LocaleObjectCache { private Cache() { } @Override - protected Locale createObject(LocaleKey key) { - return new Locale(key.base, key.exts); + protected Locale createObject(Object key) { + if (key instanceof BaseLocale) { + return new Locale((BaseLocale)key, null); + } else { + LocaleKey lk = (LocaleKey)key; + return new Locale(lk.base, lk.exts); + } } }