黑马程序员技术交流社区

标题: char字节存储汉字? [打印本页]

作者: 李东升    时间: 2012-7-24 11:35
标题: char字节存储汉字?
  1. public static void main(String[] args) {
  2.                 char c='李';
  3.                 System.out.println(c);
  4.                 String s="周";
  5.                 System.out.println(s);
  6.         }
复制代码

复制代码
String存储汉字很好理解的,但是char怎么能存储汉字呢?我记得很多地方都是一个汉字代替两个英文字母的,这要怎么理解?莫非char和汉字还有一些说不清道不明的秘密?
作者: 李菁    时间: 2012-7-24 11:40
char类型存储一个字符,你说的一个汉字代替两个英文字母,是在GBK中文编码中,一个字符占两个字节。
char按字符存储,不是按字节。所以char可以存储一个汉字
作者: 陈少文    时间: 2012-7-24 11:45
本帖最后由 陈少文 于 2012-7-24 11:47 编辑

一个汉字=2个英文字母=2字节
一个char在机器内部占2个字节

就可以理解char字节可以存储汉字了
例:
char c= '汉';//可以
char c1 = '汉字';//不可以

并且
1字节(Byte)=8字位=8个二进制数
1字位(bit)=1个二进制数

作者: 黑马李文    时间: 2012-7-24 11:46
char占用2个字节,用来储存Unicode字符。范围在0-65536。unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。
补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

class   chartest
{
public   static   void   main(String   args[])
{
char   c   =   '李 ';
System.out.println(c);
}
}


作者: 杨卓儒    时间: 2012-7-24 11:54
这种问题请百度
作者: 刘海源    时间: 2012-7-24 11:56
Char类型可以存储两个字节,而一个汉字占两个字节
所以char可以存储一个汉字
作者: 乐峰    时间: 2012-7-24 12:13
首先,java中的一个char的确是2个字节。java采用unicode,2个字节来表示一个字符。
java中,只要是字符,不管是数字还是英文还是汉字,都占两个字节,都是一个char。
所以char里面可以存储一个汉字。
作者: 古银平    时间: 2012-7-24 12:25
这是java语言定义的,java采用的编码方式支持汉字的存储,char类型占用2个字节,在java中支持汉字的
作者: 刘奇    时间: 2012-7-24 12:26
char类型存储的就是两个字节的,并且一个汉字也是占两个字节,这样char当然可以存储一个汉字喽
作者: 黑马黄宏强    时间: 2012-7-24 14:52
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个字节来表示一个字符。

希望对你能有所帮助。
作者: 姬仁贵    时间: 2012-7-24 14:55
JAVA默认的编码是UNICODE.不是ASCII的char

在java中一个汉字是以两个字节来存储的,

UNICODE编码也是已两个字节来存储数据的,
在java中他的编码其实默认是 Unicode的
就是说下面程序中  char s='我'  ;    可以正常运行。
所以在java中是可以存储一个汉字的。




public class Test
{
       public static void main(String args[])
         {
             char s ='我';
             System.out.print(s);
         }




java中字符实际上只是一个16位的无符号整数,
即:两个字节
1 字节(Byte) =  8位(bit);


作者: 魏-玉-彪    时间: 2012-7-24 18:45
本帖最后由 魏-玉-彪 于 2012-7-24 18:52 编辑

一个字符等于两个字节,占十六位 当然可以存储汉字了。字符串是以这个char型字符为单位的
作者: 王志明    时间: 2012-7-24 19:25
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

作者: 罗宵    时间: 2012-7-25 23:26
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中可以存储汉字。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节,汉字也是两个字节。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2