关于String长度的一些总结

1.正常情况,String内部使用char数组来存储字符串,无论字母还是中文,都按一个char也就是两个字节计算

image.png

2.但是如果有一些抽象的字符,就会用两个char来表示
image.png

3.究其原因,java的char是用utf-16变长编码设计的,所谓变长就是说能用两个字节表示的字符就用一个char,要不然就用两个char。这里还有一个内码和外码的概念。如下:
image.png

由1可知,a, 这两个字符在java中都是占一个char也就是两个字节,这个就是所谓的内码。
但是转成utf-8编码,就变成了1个字节和三个字节,utf-8就是外码

4.关于unicode和codepoint的概念,简单的说,unicode就是一个char(两个字节),而codepoint是一个字符(1个char或者2个char)

image.png

你可能感兴趣的:(关于String长度的一些总结)