黑马程序员技术交流社区

标题: JAVA中char型变量的迷惑 [打印本页]

作者: 何仕映    时间: 2013-3-15 17:45
标题: JAVA中char型变量的迷惑
本帖最后由 何仕映 于 2013-3-15 18:59 编辑

在JAVA中定义一个字符变量,比如 char a = 'b';英文字母在内存中占一个字节,这样赋值肯定没有问题。但是为什么像这样 char b = '你';给字符变量赋一个汉字也行呢?一个汉字在内存中可是占两个字节啊。并且 char c = 'ab';像这样为什么就不行了呢?我知道两个字母就应该用双引号,是字符串。我现在想知道的是两个英文字母占两个字节。为什么就不可以了呢?汉字是两个字节为什么就可以呢?我很迷惑,请各位大哥大姐们指点一下。谢谢。

作者: 黑马-王鹏    时间: 2013-3-15 17:53
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。对于char c = 'ab',好像没看到有这样赋值的吧,这个问题无法解释
作者: 曹春贵    时间: 2013-3-15 17:54
  1.         public static void main(String[] args) {
  2.                 char c = '汉';// char类型是能够存储一个中文汉字的
  3.                 System.out.println(c);
  4.                 System.out.println((int) c);// 将c强转成int输出为27721,这里代表汉这个字多对应的ascii码值是27721
  5.                 // char 保存无符号的 16 位(双字节)码位,其值的范围从 0 到 65535,汉字在计算机中存储形式是以ascii来保存
  6.                 // 而汉字的ascii范围在char的范围之内,所以char能够存放汉字
  7.         }
复制代码

作者: HM刘博    时间: 2013-3-15 17:54
char只占一个字节,一个字母是一个字节,一个汉字是两个字节,因此,char型变量只能装入一个字母,例如: char a = 'b';这样是正确的。
但是char型变量不能装汉字,如果想要装如汉字,用char数组就可以了,例如: char a[5]="你";
同理这个 char c = 'ab';就不可以了,两个字母这个可以写成字符串 String str="ab"形式
作者: 0.00    时间: 2013-3-15 17:59
ab是个字符串,应该定义string,并且是双引号。 char只能定义单个字符 加单引号 或者\u 用来读取数据的unicode值,用了\u后面可以加字符串 例如 char c='\uab'
作者: 打工人    时间: 2013-3-15 18:04
本帖最后由 冯海霞 于 2013-3-15 18:06 编辑
HM刘博 发表于 2013-3-15 17:54
char只占一个字节,一个字母是一个字节,一个汉字是两个字节,因此,char型变量只能装入一个字母,例如: c ...

你听谁说的。。楼主问的是java,不是C

你说的是在C和C++中的
作者: HM刘博    时间: 2013-3-15 18:13
冯海霞 发表于 2013-3-15 18:04
你听谁说的。。楼主问的是java,不是C

你说的是在C和C++中的


哦哦,是哦,不好意思啊,看了一下书,我错了,这回记住了,记混了
作者: HM刘博    时间: 2013-3-15 18:15
HM刘博 发表于 2013-3-15 17:54
char只占一个字节,一个字母是一个字节,一个汉字是两个字节,因此,char型变量只能装入一个字母,例如: c ...

好的,谢谢
作者: HM张超    时间: 2013-3-15 18:17
char类型应用少点,String的比较多
char一般存储的是0,1后者是否之类的!
实体类返回只有单个字符时候用char。
作者: 黄玉昆    时间: 2013-3-15 18:26
a表示一个单个的字符,而ab是两个字符组合在一起,就成了字符串了,当然不能赋值给char类型了。还有就是一个汉字也是一个字符,注意,是字符,但是汉字一般来说是两个字节,但是汉字很多,也有三个字节,或一个字节的,这就涉及到编码的问题,想了解更多,可以自己百度查查相关资料。
你也可以后看看我的这个帖子的第8题:http://bbs.itheima.com/thread-41087-1-1.html
作者: MyNameIs520    时间: 2013-3-15 18:27
本帖最后由 吴上波 于 2013-3-15 18:46 编辑

亲爱的楼主,你肯定学过C或者C++吧·~~~要不你肯定不会问这个问题的~~~
Java用的是Unicode编码,Unicode编码中所有的字符都占两个字节。
不论是中文还是英文,还是其他特殊符号~~,那它就占了两个字节,这点和C是不一样的~~
也正是因为这个特点,Java的Char型数据是可以存放中文字符的,一般的两字节的中文字符在Unicode编码表中都可以找到~~特殊的就不说了





作者: 何仕映    时间: 2013-3-15 18:58
黄玉昆 发表于 2013-3-15 18:26
a表示一个单个的字符,而ab是两个字符组合在一起,就成了字符串了,当然不能赋值给char类型了。还有就是一 ...

昆哥,char型变量占两个字节,你是想说16个位吧。你写成了16个字节。谢谢您哈。你总结了好多啊。值得我学习。
作者: 黄玉昆    时间: 2013-3-15 19:02
何仕映 发表于 2013-3-15 18:58
昆哥,char型变量占两个字节,你是想说16个位吧。你写成了16个字节。谢谢您哈。你总结了好多啊。值得我学 ...

嗯啊,你说的没错,确实是两个字节,16位,是我的疏忽,谢谢




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