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

Piy*_*ush 0 java utf-16 char utf character-encoding

如果Java中的字符串是UTF-16,那么UTF-16字符的大小可能是4个字节.因此,1个UTF-16角色必须映射到2个字符.

这意味着String长度可能小于等效的char []长度.

但事实并非如此.

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

byte [] ar =  s.getBytes();
char [] arr =  s.toCharArray();
Run Code Online (Sandbox Code Playgroud)

字节数组的长度为9.
字符数组的长度为3.
所以char的大小如何为2字节?

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

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

chi*_*ity 5

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