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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© serge 中级黑马   /  2015-11-28 23:36  /  872 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

老师讲课时有一句话是:在0到127之间,byte,char,int之间可以相互转换。
但是,我写了以下代码:
  1. char c = 'a';
  2. byte b = c;

  3. int i = 2;
  4. byte by = i;
复制代码

都报错误,说是可能影响精度。
这么说来,最上面那句话就是错的咯?

5 个回复

倒序浏览
byte和char可以自动提升为int型,int型向下转型需要强制转换.
回复 使用道具 举报
zqiang 发表于 2015-11-28 23:47
byte和char可以自动提升为int型,int型向下转型需要强制转换.

非常感谢你的回答,加上之后就ok了。
char c = 'a';
        byte b = (byte)c;
        int i = 2;
        byte by = (byte)i;
回复 使用道具 举报
zqiang 发表于 2015-11-28 23:47
byte和char可以自动提升为int型,int型向下转型需要强制转换.

嗯,不错。小转大可以自动转,大转小需要强转。
回复 使用道具 举报
其实最重要的是看内存空间,
1.   byte:8二进制位。-128~127.
      char:     0~65535

所以把字符型转成byte型需要强制转化。而把byte转成char也需要强制转化。
2.   同理整型int:32二进制位。-2^(32-1)~-2^(32-1)-1   

所以整型转化成byte型需要强制转化,而byte型转化成整型可以自动提升。

强制转化的格式int b=266;byte a=(byte)b;强制转换会丢失精度,但不会报错了。输出结果为a=10;
希望对你理解有帮助
回复 使用道具 举报
TG·小强 发表于 2015-11-29 10:09
其实最重要的是看内存空间,
1.   byte:8二进制位。-128~127.
      char:     0~65535

很详细 非常感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马