请帮助我理解java是如何存储字符串和字符数组的。在java中,Character.SIZE返回16,堆栈溢出和web上的大多数答案都表明java中的字符是16位的(显然,因为它内部使用了UTF-16 ),但是UTF-16不能将所有内容都放在2个字节中。例如中文。
char c = '的';
System.out.println(Arrays.toString(Character.toString(c).getBytes(StandardCharsets.UTF_16)));这段代码打印[-2, -1, 118, -124],这意味着一个字符有4字节长。这是否意味着java中由char[]数组组成的字符串,每个字符占用4个字节。这会占用太多的空间,所以我假设不会发生这种情况。一定是char具有可变长度。如果是这样的话,如果不首先指定每个字符的长度,就不可能将char[]作为一个很长的字节列表存储在ram中。这也会占用太多的空间。
那么在Java中,char的实际大小是多少?如果它的长度是可变的,那么它是如何存储在ram中的?
发布于 2019-08-21 18:23:20
您使用的字符是一个2字节字符。
编码字节数组中的前两个字节是UTF-16 byte order mark。
实际的4字节unicode码位将表示为两个字符。
final char[] chars = Character.toChars(0x2070E);
System.out.println(chars.length);https://stackoverflow.com/questions/57588983
复制相似问题