char型变量中能不能存贮一个中文汉字。确定下一个汉字到底占几个字符?
char类型可以存储一个中文汉字。因为Java中char的编码方式为UTF-16BE。UTF-16编码使用2或者4字节,在65536以内的占两个字节。而基本上所有中文的Unicode编码在19968到40869之间——既Unicode至少包含了20902个汉字,所以一个char类型可以存储一个汉字。
占用的字节
GB2312
GB2312标准主要针对的是简体中文常见字符,包括约7000个汉字,不包括一些罕用词,不包括繁体字。
GBK
GBK建立在GB2312的基础上,向下兼容GB2312,也就是说,GB2312编码的字符和二进制表示,在GBK编码里是完全一样的。需要注意的是,低位字节是从0x40也就是64开始的,也就是说,低位字节最高位可能为0。
GB18030
GB18030向下兼容GBK,增加了五万五千多个字符,共七万六千多个字符。包括了很多少数民族字符,以及中日韩统一字符。
Big5
Big5是针对繁体中文的,广泛用于台湾香港等地。
Big5包括1万3千多个繁体字,和GB2312类似,一个字符同样固定使用两个字节表示。在这两个字节中,高位字节范围是0x81-0xFE,低位字节范围是0x40-0x7E和0xA1-0xFE。
总之,byte是1个字节,char是两个字节,但是char里可以存一个汉字,这么说汉字就占用两个字节?String类型里的汉字,按照编码格式的不同,分为2-4个字节的占用,UTF-8占用3个字节,特别的占用4个字节。GBK里汉字确实是占用2个字节。UTF-16里汉字一般占2个字节,特殊的是4个字节。