char类型变量占几个字节的内存存储 [Java]

java中的char类型变量占用几个字节的内存进行存储

在内码中: 通过UTF-16编码进行存储字符,而UTF-16中使用2个或者4个字节来表示一个字符,这个时候如果是2个字节可以存储的字符我们就使用一个char表示,如果是需要4个字节表示的字符,在UTF-16编码中我们通过两个char类型变量来表示

  • 所以在内码中,char类型变量使用两个字节进行存储,只不过有一些特殊的字符要使用两个char来表示

在外码中: 使用UTF-8来存储字符,占用1-4个字节(现在是1-6个字节)存储

那么什么是内码?什么是外码?

内码(Internal Encoding):

某种语言运行时,其char和String类型的变量在内存中的编码方式

外码(External Encoding):

除了内码就是外码

  • 源文件和class文件中的编码方式都是属于外码

总结:

  1. java中内码(运行时内存)中的char类型变量使用UTF-16的方式进行编码,一个char占用两个字符,但是某些特殊的字符需要两个char来表示

    • 也就是在内码中char都是占用两个字节进行存储的,但是一个字符占用两个字节(一个char)或者四个字节(两个char)进行存储
  2. java中外码中char类型变量使用UTF-16的方式进行编码,一个字符占用1-4个字节(现在是1-6个字节进行存储)

  3. UTF-16编码中: 英文字符占用两个字节进行存储,绝大多数汉字使用两个字节进行存储,个别汉字(一般都是使用不到的生僻字)使用四个字节进行存储

  4. UTF-8编码中: 英文字符占用一个字节进行存储,绝大多数汉字使用三个字节进行存储,个别汉字使用四个字节进行存储

问题遗留:UTF-16中的个别生僻汉字使用四个字节来表示,这个时候为什么是两个char来表示的?一个汉字不应该是对应了一个char类型的变量?

你可能感兴趣的:(java,java,开发语言,后端)