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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马林康 中级黑马   /  2012-9-24 00:09  /  2994 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class CharTest {
  2.         public static void main(String[] args) {
  3.                 System.out.println('\u005B'+"hello"+'\u005D');//输出[hello]
  4.                 int a='a';
  5.                 System.out.println(a);//97
  6.                 char ch1=0x5B;
  7.                 char ch2=0x5D;
  8.                 System.out.println(ch1+"world"+ch2);//[world]
  9.         }
  10. }
复制代码
程序正常运行 这是什么情况? char 自动转换为int正常~int自动转换为char不可接受!!

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
八进制、十六进制不能算整型,编译器在编译时就会把他们自动变成二进制,只要不超过所赋值类型就可以正常运行,不涉及类型转换

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 参与有奖

查看全部评分

回复 使用道具 举报
我试验过了你取的十六进制数的范在CHAR的取值范围内所以运行没有错误,如果超出CHAR的范围就会报错
2楼说的非常清楚了。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 参与有奖

查看全部评分

回复 使用道具 举报
char在其实存储是字符编码,当你打印是其实打印的就是字符所对应的字符编码

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 参与有奖

查看全部评分

回复 使用道具 举报
int占4个字节,char占两个字节,把char赋值给int,int就把值存入低位的两个字节,高位两字节补零。

char                  1010-1100
int    0000-0000-1010-1100

int赋值给char就会出现4个字节的数据存到2个字节的存储空间。

int    0110-0011-1110-0001
char                  1110-0001
丢失了两个个字节的数据,损失了精度,需要用强转来告诉编译器你确定要这样做。

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
这很正常啊,你加了转义字符\就会吧八进制转为相应的字符塞

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 参与有奖

查看全部评分

回复 使用道具 举报
char ch1=0x5B;
char ch2=0x5D;

这里面的0x5B,ox5D两个16进制数据其实还是字符,在ASCII中是用一个字节的全部8位(bit)表示的,对应的ASCII中的字符就是'['和']',占的都是一个字节,并不是表示转换后为int类型的数据91和93,在内存中占4个字节,这是我的理解,希望能够对你有用。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 参与有奖

查看全部评分

回复 使用道具 举报
低的可以自动提升 也可以下降不够很容易出错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马