为什么两个字符的UTF-16字符串在内存中只占用6个字节,而1个字符的UTF-16字符串占用4个字节?
以下是java中的SSCCE来演示此行为:
public class UTF16Test{
public static void main(String[] args) throws Exception {
System.out.println("A".getBytes("UTF-16").length);
System.out.println("AB".getBytes("UTF-16").length);
}
}
输出:
4
6
答案 0 :(得分:5)
你必须考虑UTF-16的2字节Byte-Order-Marks吗?
您的前2个字节将是:FE FF
或FF FE
,具体取决于您是使用Big还是Little end机器。你应该检查......
我做了,而且是[-2, -1, 0, 65, 0, 66]
。
您还应该考虑String值不会占用内存中的额外空间,只有当String编码为byte[]
时才会添加字节顺序标记....字符串{{1在内存中使用AB
,直到它被char[2]
字节编码。