JAVA中char是能存储一个汉字 原因是java使用的是unicode编码表,
大家都知道计算机子只能存储0101这样的二进制,是无法直接储存字符的,因此有了码表的出现,老外就把键盘上的所有键对应成相应的二进制,这样就有了ASCII码表(美国信息交换标准码表),因为老美那边的语言很简单只要一个字节就能存完所有的对应关系了。所以ASCII中所有的字符都只占一个字节。中国也有这样的码表,因为中国文字博大精深一个字节是不可能存完的,所以中国的文字使用的是2个字节表示一个汉字,这就是我们的国标 GB2312.码表里面既包含了字母又包含了中文,为了让让计算机能识别出该取一个字节转换还是取两个字节转换,GB2312码表中使用了正数来对应字母,负数对应汉字,计算机碰到正数就取一个字节数字来查码表,碰到负数就取两个字节来查码表。
世界上有很多个国家,每个国家都有自己的码表,后来W3C组织这帮家伙就把全世界的文字都集成到了一张码表,这张码表里有世界上所有文字的对应二进制关系,这就是unicode编码表,而java就是使用这张码表,因此java中的char类型是占用两个字节的,因此是可以存储一个汉字的。
java中的char类型也并不能存储所有的中文汉字,因为有些比较生僻的字并未存大unicode编码表中。大家都知道中国的文字实在是太博大精深了,后来W3C组织那帮家伙又做了这样一件事情,就是把unicode编码优化扩容,老外的文字用1字节能搞定就用一字节就OK了,而中过的文字2个字节存不完就用3个字节,这就是现在的UTF-8码表,这也是一张国际通用码表,使用的是1-3个字节来表示一个字符。
希望对你能有所帮助。 |