J'imagine que la raison était rapide, comme l'accès au tableau à l'index, mais certains caractères ne tiennent pas en 16 bits, donc cela ne fonctionnerait pas ...
Donc, si vous devez gérer des cas spéciaux de toute façon, pourquoi ne pas simplement utiliser UTF-8?
Parce que c'était CS-2 , qui était un Nice 16 bits de longueur fixe. Bien sûr, 16 bits ne s'est pas avéré suffisant. Ils ont modernisé UTF-16 en haut.
Pour l'essentiel, dans un souci de pérennité clair et simple. Que ce soit une raison erronée et la mauvaise façon de procéder est une question différente.
Vous pouvez voir quelques raisons derrière certaines de leurs décisions de conception dans ce document sur le passage de 2004 à Java 5 et UTF-16, ce qui explique également certaines des lacunes: Caractères supplémentaires dans la Java, et voyez Pourquoi l'écosystème Java utilise différents encodages dans sa pile?.
Pour plus de détails sur les pièges de l'utilisation de l'UTF-16, et pourquoi UTF-8 est susceptible d'être une meilleure option en général, voir TF-16 devrait-il être considéré comme dangereux? et le manifeste TF-8 Everywhere.