В какой кодировке Java использует UTF-8 или UTF-16?

Я уже прочитал следующие посты:

Каково внутреннее представление Java для String? Модифицированный UTF-8? UTF-16?https://docs.oracle.com/javase/8/docs/api/java/lang/String.html

Теперь рассмотрим код, приведенный ниже:

public static void main(String[] args) {
    printCharacterDetails("最");
}

public static void printCharacterDetails(String character){
    System.out.println("Unicode Value for "+character+"="+Integer.toHexString(character.codePointAt(0)));
    byte[] bytes = character.getBytes();
    System.out.println("The UTF-8 Character="+character+"  | Default: Number of Bytes="+bytes.length);
    String stringUTF16 = new String(bytes, StandardCharsets.UTF_16);
    System.out.println("The corresponding UTF-16 Character="+stringUTF16+"  | UTF-16: Number of Bytes="+stringUTF16.getBytes().length);
    System.out.println("----------------------------------------------------------------------------------------");
}

Когда я попытался отладить строкуcharacter.getBytes() в приведенном выше коде отладчик взял меня вgetBytes() метод класса String, а затем вstatic byte[] encode(char[] ca, int off, int len) метод класса StringCoding. Первая строка метода кодирования (String csn = Charset.defaultCharset().name();) вернул «UTF-8» в качестве кодировки по умолчанию во время отладки. Я ожидал, что это будет "UTF-16".

Выход программы:

Значение Юникода для 最 = 6700 Символ UTF-8 = 最 | По умолчанию: число байтов = 3

Соответствующий символ UTF-16 =  | UTF-16: количество байтов = 6

Когда я явно преобразовал его в UTF-16 в программе, потребовалось 6 байтов для представления символа. Разве он не должен использовать 2 или 4 байта для UTF-16? Почему было использовано 6 байтов?

Где я иду не так в моем понимании? Я использую Ubuntu 14.04, и команда locale показывает следующее:

LANG=en_US.UTF-8

Означает ли это, что JVM решает, какую кодировку использовать на основе базовой ОС, или она использует только UTF-16? Пожалуйста, помогите мне понять концепцию.

Ответы на вопрос(2)

Ваш ответ на вопрос