char占几个字节取决于使用的是什么字符集,用什么编码方式,但不管怎样英文都是只占一个字节。下面就先说一说常用的字符集
一、字符集
1.1、ASCII字符集
ascii字符集中只有英文,没有中文,只占一个字节。参照ascii表可知。
存储规则:前面补0,补齐8位
1.2、GBK字符集
英文字符用一个字节存储,中文用两个字节存储。注意的是,存储汉字的时候,高字节二进制一定是以1开头的,转换为十进制一定是负数。英文是以0开头的,转换十进制是整数。因此在读取文件时,读到以1开头的字节时,就知道要连续都两个字节,这样就不会出现乱码。
GBK编码存储规则:不需要什么变动,直接把汉字对应的编码值转换为二进制,然后存进计算机内存中。注意计算机是以补码的形式进行存储的。所以再把11010110、11010000转为十进制之前,需要先求原码。补码的补码就是原码。
以11010110为例,先把补码看成源码求反码,负数求反码符号位不变,其余的按位取反,即为10101001,负数求补码 反码+1,即为10101010,转换为十进制为-42。
1.3、Unicode字符集
UTF-N编码规则:
Unicode Transfer Format
UTF-16编码规则:用2~4个字节保存
UTF-32编码规则:固定使用4个字节保存
UTF-8编码规则:用有1~4个字节保存
utf-8中,中文占三个字节,编码规则如下
二、代码
char[] c = {'a','中'};
String str1 = new String(c);
System.out.println(Arrays.toString(str1.getBytes("GBK")));//[97, -42, -48]
System.out.println(Arrays.toString(str1.getBytes("UTF-8")));//[97, -28, -72, -83]
System.out.println(str1.getBytes("GBK").length);//3
System.out.println(str1.getBytes("UTF-8").length);//4