阿里的一道电面题:char类型能否存储汉字

百度随便搜一下答案就应该能出来能存储汉字。下面看下何为char

char 类型想必大家都比较熟悉了,java的八大类型之一,能存储两个字节,看情况讲道理应该能存储汉字,答案也是能的。

char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字。

unicode如其名字,统一码,万国码 国际通用码,它的出现就是为了屏蔽各个国家不同编码的差异,unicode用两个字节表示一个字符,仿佛一切问题都解决了,但是问题在于,原本可以用一个字节存储的英文字母在Unicode里面必须存两个字节(规则就是在原来英文字母对应ASCII码前面补0),这就产生了浪费。那么有没有一种既能消除乱码,又能避免浪费的编码方式呢?答案就是UTF-8! 

问题来了,大家都知道在GBK(国产编码)的编码下汉字是两个字节,但是在UTF-8情况下汉字为三个字节,那这个时候char还能存储一个汉字吗?答案还是可以的;

char类型能存储两个字节,UTF-8编码下汉字是三个字节,它是怎么存储的呢?这要分析下unicode和utf-8的关系

unicode编码中一个中文字符占2个字节,而UTF-8一个中文字符占3个字节。从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。 
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。 
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。

从上我们可以知道char类型并非存储的是utf-8而是转换后的unicode,今天怎么对应的这里不做详解