java utf8 encoding - char, typy łańcuchów

public class UTF8 {
    public static void main(String[] args){
        String s = "ヨ"; //0xFF6E
        System.out.println(s.getBytes().length);//length of the string
        System.out.println(s.charAt(0));//first character in the string
    }
}

wydajność:

3
ヨ

Pomóż mi to zrozumieć. Próbuję zrozumieć, jak działa kodowanie utf8 w Javie. Jak w definicji java docchar: Typ danych char jest pojedynczym 16-bitowym znakiem Unicode.

Czy to znaczy, że typ char w java może obsługiwać tylko te znaki Unicode, które mogą być reprezentowane przez 2 bajty i nie więcej niż to?

W powyższym programie, liczba bajtów przydzielonych dla tego ciągu wynosi 3, ale w trzeciej linii, która zwraca pierwszy znak (2 bajty w java), może zawierać znak o długości 3 bajtów? naprawdę zdezorientowany?

Wszelkie dobre odniesienia dotyczące tej koncepcji w Javie / General byłyby naprawdę mile widziane.

questionAnswers(4)

yourAnswerToTheQuestion