A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何仕映 中级黑马   /  2013-3-15 17:45  /  5454 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何仕映 于 2013-3-15 18:59 编辑

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

点评

如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-15 18:56

12 个回复

倒序浏览
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。对于char c = 'ab',好像没看到有这样赋值的吧,这个问题无法解释
回复 使用道具 举报
  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.         }
复制代码
回复 使用道具 举报
char只占一个字节,一个字母是一个字节,一个汉字是两个字节,因此,char型变量只能装入一个字母,例如: char a = 'b';这样是正确的。
但是char型变量不能装汉字,如果想要装如汉字,用char数组就可以了,例如: char a[5]="你";
同理这个 char c = 'ab';就不可以了,两个字母这个可以写成字符串 String str="ab"形式

点评

童鞋,还是好好看看视频吧,你也可以看看char相关的帖子  发表于 2013-3-15 18:13
回复 使用道具 举报
ab是个字符串,应该定义string,并且是双引号。 char只能定义单个字符 加单引号 或者\u 用来读取数据的unicode值,用了\u后面可以加字符串 例如 char c='\uab'
回复 使用道具 举报
本帖最后由 冯海霞 于 2013-3-15 18:06 编辑
HM刘博 发表于 2013-3-15 17:54
char只占一个字节,一个字母是一个字节,一个汉字是两个字节,因此,char型变量只能装入一个字母,例如: c ...

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

你说的是在C和C++中的
回复 使用道具 举报
冯海霞 发表于 2013-3-15 18:04
你听谁说的。。楼主问的是java,不是C

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


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

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

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




回复 使用道具 举报
黄玉昆 发表于 2013-3-15 18:26
a表示一个单个的字符,而ab是两个字符组合在一起,就成了字符串了,当然不能赋值给char类型了。还有就是一 ...

昆哥,char型变量占两个字节,你是想说16个位吧。你写成了16个字节。谢谢您哈。你总结了好多啊。值得我学习。
回复 使用道具 举报
何仕映 发表于 2013-3-15 18:58
昆哥,char型变量占两个字节,你是想说16个位吧。你写成了16个字节。谢谢您哈。你总结了好多啊。值得我学 ...

嗯啊,你说的没错,确实是两个字节,16位,是我的疏忽,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马