Welche Codierung verwendet Java UTF-8 oder UTF-16?

Ich habe bereits folgende Beiträge gelesen:

Was ist die interne Darstellung von Java für String? Geändertes UTF-8? UTF-16?https: //docs.oracle.com/javase/8/docs/api/java/lang/String.htm

Betrachten Sie nun den unten angegebenen Code:

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

Wenn ich versucht habe, die Zeile zu debuggencharacter.getBytes() Im obigen Code hat mich der Debugger in dasgetBytes() -Methode der String-Klasse und anschließend in dasstatic byte[] encode(char[] ca, int off, int len) Methode der StringCoding Klasse. Die erste Zeile der encode-Methode String csn = Charset.defaultCharset().name();) hat beim Debuggen "UTF-8" als Standardkodierung zurückgegeben. Ich habe erwartet, dass es "UTF-16" ist.

Die Ausgabe des Programms ist:

Unicode-Wert für 最 = 6700 Das UTF-8-Zeichen = 最 | Standard: Anzahl der Bytes = 3

Das entsprechende UTF-16-Zeichen =  | UTF-16: Anzahl der Bytes = 6

Wenn ich es explizit in UTF-16 konvertiert habe, hat es 6 Bytes gedauert, um das Zeichen darzustellen. Sollte es nicht 2 oder 4 Bytes für UTF-16 verwenden? Warum wurden 6 Bytes verwendet?

Wo gehe ich falsch in meinem Verständnis? Ich verwende Ubuntu 14.04 und der Befehl locale zeigt Folgendes:

LANG=en_US.UTF-8

Bedeutet dies, dass JVM anhand des zugrunde liegenden Betriebssystems entscheidet, welche Codierung verwendet wird, oder wird nur UTF-16 verwendet? Bitte helfen Sie mir, das Konzept zu verstehen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage