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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

对于程序public class test{
         public static void main(String[] args){           byte b=3;
           b=(byte)(b+3); //把b+3的值转换为byte类型
           System.out.println(b);
         }
}
程序这样可以运行,但是我想把 b=(byte)(b+3)修改成 b=b+(byte)3;
修改好程序编译时报错了,都是byte类型做运算 为什么不行呢?大家帮我解答一下谢谢


评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

7 个回复

倒序浏览
这个真不知道,你这 帖我测试过,b+(byte)3自动转换成了int。这个以后注意点就行了吧。能知道原因那当然更好
回复 使用道具 举报
哥。混合运算肯定提升为int啊,b你也没有声明是什么类型啊?
回复 使用道具 举报
本帖最后由 麦者 于 2013-11-6 20:02 编辑

这涉及到了数据的自动装箱和拆箱功能:
基本类型:int,double,float,long,boolean,char,btye,short
基本类型包装类:Integer,Double,Float,Long,Boolean,Char,Byte,Short你这是byte基本数据类型,他是没有包装的,也就是说他不会自动拆箱,你强制转换一次,他就转换一次,不会
成为所谓的“箱”,你如果改成Byte就可以了。但是你上面的3是int型的,你强转是不对的啊,可以是Byte b=3;但是不能 把3(int)转成byte

评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
lass Teat0 {
        public static void main(String[] args) {
                byte b =3;
                 b = (byte)(b + 3);
                System.out.println(b);
        }
}
刚刚说错了。弄了好久还是不行,放哪都不行,就只能这样放了!
回复 使用道具 举报
卑微の小幸福 发表于 2013-11-6 20:04
lass Teat0 {
        public static void main(String[] args) {
                byte b =3;

谢谢 等高手帮我们解答一下
回复 使用道具 举报
  1. <p>对于程序public class test{
  2.           public static void main(String[] args){       </p><p>            byte b=3;
  3.             b=(byte)(b+3);//   把b+3的值转换为byte类型// 此处将结果强制转换成了byte</p><p> </p><p> </p><p>              b=b+(byte)3   //   此处为自动类型提升,   运算时自动提升为int型,  接收变量b仍为 byte 型   所以出错
  4.            System.out.println(b);
  5.           }
  6. }</p>
复制代码
对基本数据类型执地算术或按位运算,大家会发现,只要类型比int 小,即(char,
byte 或short),那么在运算之前,这些值会自动转换成int.------《java编程思想》
回复 使用道具 举报
因为在强转3的时候,计算机会把b默认为也是int类型的了,所以就编译失败了  。所以如果要强转的话就要把=右边的整体强转为byte类型。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马