黑马程序员技术交流社区

标题: 关于字符的问题 [打印本页]

作者: 黑马贾林栋    时间: 2012-10-31 21:42
标题: 关于字符的问题
本帖最后由 黑马贾林栋 于 2012-11-1 22:48 编辑
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                
  6.                 char q='b';
  7.                 char w='a';
  8.                 q=(char)(q+w);
  9.                 sop(q);
  10.         }
  11.         public static void sop(Object obj )
  12.         {
  13.                 System.out.println(obj);
  14.         }
  15. }
复制代码
打印出来的结果是:?
怎么设置才能把对应的字符打印出来?


作者: 吴硕    时间: 2012-10-31 22:03
'a'的十进制是97
'b'的十进制是98
q='a'+'b'=195
应该是查字符码表(系统默认GBK)195时,没有对应的字符,所以返回了?
实际的'?'在ASCII表(GBK兼容ASCII)中的十进制是63
作者: 打工人    时间: 2012-10-31 22:06
ASCII码表最大也就才到127.。。。。。w和q对应的值加起来大于127了,没有对应的字符了。。。。
你可以(char)127;
         (char)128;
这样做个试验
作者: 黑马贾林栋    时间: 2012-10-31 22:07
吴硕 发表于 2012-10-31 22:03
'a'的十进制是97
'b'的十进制是98
q='a'+'b'=195

我用的Editplus,怎么设置下可以打印出来?换个编码表?
作者: 樊鹏飞    时间: 2012-10-31 22:11
问下楼主想打印的结果是什么?
你的代码 我运行结果是  Ã
你将两个char类型的做加法运算 其实默认的是在将字符a和字符b在编码表中对应的值做运算 而他们对应的值是int类型的
作者: 吴硕    时间: 2012-10-31 22:15
黑马贾林栋 发表于 2012-10-31 22:07
我用的Editplus,怎么设置下可以打印出来?换个编码表?

应该不行吧,即使有个编码表能查出字符,也没意义,因为我们都在使用GBK
作者: 黑马贾林栋    时间: 2012-10-31 22:28
樊鹏飞 发表于 2012-10-31 22:11
问下楼主想打印的结果是什么?
你的代码 我运行结果是  Ã
你将两个char类型的做加法运算 其实默认的是在将 ...

可能是工具的问题吧,我用的editplus,只能打印0~127对应的字符,超出的就打不出来了
作者: 深井看海    时间: 2012-11-4 19:43
樊鹏飞 发表于 2012-10-31 22:11
问下楼主想打印的结果是什么?
你的代码 我运行结果是  Ã
你将两个char类型的做加法运算 其实默认的是在将 ...

你运行的怎么会是Ã ??超出了ASCII码的127位数都打出"?号啊,我就纳闷你复制后怎么输出的,我也复制了楼主的代码结果是"?"不能打出内容
作者: 深井看海    时间: 2012-11-4 20:14
char是16位的,底层采用unicode编码保存,但是不代表所有的值都需要有字符,unicode也有没有用到的位置。
没有用到的位置,转成string的话就会出现?这个是java的内部机制




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