如果所有 Java 字符串都是 UTF-16 字符串,那么 char 数据类型的最大大小怎么能为 2?

If all Java Strings are UTF-16 strings then how can char datatype have max size of 2?

如果 Java 中的字符串是 UTF-16,则 UTF-16 字符的大小可能为 4 个字节。 所以 1 个 UTF-16 字符必须映射到 2 个字符。

这意味着字符串长度可能小于等效的 char[] 长度。

但事实并非如此

Character x = new Character((char) 7000);
String s = new String(""+x+x+x);

byte [] ar =  s.getBytes();
char [] arr =  s.toCharArray();

字节数组的长度为 9。
char 数组的长度为 3。
那么 char 怎么能有 2 个字节的大小呢?

所以我认为 java 中的 char 可能大于 2 个字节,具体取决于需要是正确的。

如果是,java 中 char 的最大大小是多少?或者它是可变长度的,将来可能会无限长?

String.getBytes() 调用不 return UTF-16 内部表示。它 return 是平台默认编码的字符串。在您的情况下,这很可能是 UTF-8(不过,作为平台确定的东西,您需要检查以确定)。 (char)7000(Unicode 代码点 U+1B58 BALINESE DIGIT EIGHT)的 UTF-8 编码形式是 3 个字节 - E1 AD 98。因此,您的 9 个字节对应 3 个字符。