Qual codificação Java usa UTF-8 ou UTF-16?

Eu já li as seguintes postagens:

Qual é a representação interna do Java para String? UTF-8 modificado? UTF-16?https://docs.oracle.com/javase/8/docs/api/java/lang/String.html

Agora considere o código fornecido abaixo:

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("----------------------------------------------------------------------------------------");
}

Quando tentei depurar a linhacharacter.getBytes() no código acima, o depurador me levou para o diretóriogetBytes() método da classe String e, posteriormente, no diretóriostatic byte[] encode(char[] ca, int off, int len) método da classe StringCoding. A primeira linha do método de codificação (String csn = Charset.defaultCharset().name();) retornou "UTF-8" como a codificação padrão durante a depuração. Eu esperava que fosse "UTF-16".

A saída do programa é:

Valor Unicode para 最 = 6700 O caractere UTF-8 = 最 | Padrão: Número de bytes = 3

O caractere UTF-16 correspondente =  | UTF-16: Número de bytes = 6

Quando o converti para UTF-16 explicitamente no programa, foram necessários 6 bytes para representar o caractere. Não deveria usar 2 ou 4 bytes para UTF-16? Por que 6 bytes foram usados?

Onde estou errado no meu entendimento? Eu uso o Ubuntu 14.04 e o comando locale mostra o seguinte:

LANG=en_US.UTF-8

Isso significa que a JVM decide qual codificação usar com base no SO subjacente ou usa apenas UTF-16? Por favor me ajude a entender o conceito.

questionAnswers(2)

yourAnswerToTheQuestion