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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李彦来 中级黑马   /  2014-5-11 18:52  /  1136 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte  b=3;
b=b+2;
这个编译时报错我知道!
我想问的是:2默认是int 在和b相加时,b不是会类型自动提升吗?也就是说b会自动升级为int的4字节!
既然b已经是int了,
但是为什么还要强制转换为byte呢?

4 个回复

倒序浏览
额,这个b应该是在参与运算时,被自动提升为int类型参与运算,但是,它在变量存储的时候是byte的类型。这就好比,在变量声明时,声明b为byte类型,那么Java就会为其开辟1的字节的空间,但是当参与运算时,会将b的值取出并提升为4个字节,但是当结束运算后,想要存储到b的空间时,b只能存1个字节,所以必须强制转换。应该是这样吧
回复 使用道具 举报
b+2这个表达式是int类型,b的声明还是byte类型,运算时只不过将b的值取出并提升为4个字节.
回复 使用道具 举报
最后的希冀 发表于 2014-5-11 19:59
额,这个b应该是在参与运算时,被自动提升为int类型参与运算,但是,它在变量存储的时候是byte的类型。这就 ...

哦,明白了!谢谢啊
回复 使用道具 举报
凝霜的枯藤 发表于 2014-5-11 21:07
b+2这个表达式是int类型,b的声明还是byte类型,运算时只不过将b的值取出并提升为4个字节. ...

谢谢,我明白了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马