如果所有 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 个字符。
如果 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 个字符。