代码如下:byte b=1;
byte c=5;
//b=b+c;
b++;
b+=7;
b=20;
byte d=25;
b=c+d;
short s=1;
s=s+c;
int i=1;
i=b+5+c+d;
i=i+1+s+c+5;

在b=c+d和s=s+c的时候都报错!请问怎样解决?
谢谢!

解决方案 »

  1.   

    顺便再问:b=b+1的时候也报错,我在1前面加上(byte)都不行。
      

  2.   

    强制类型转换byte b=1;
    byte c=5;
    //b=b+c;
    b++;
    b+=7;
    b=20;
    byte d=25;
    b=(byte)(c+d);  //
    short s=1;
    s=(byte)(s+c); //
    int i=1;
    i=b+5+c+d;
    i=i+1+s+c+5;因为 b=c+d—>b=5+25;5和25默认的是int型
      

  3.   

    b=(byte)(b+c);
    对整个结果强转,java中所以低于int型的四则运算,都需要对结果强制转型.记得有位csdn强人分析过,
    java四则运算的最小单位是int,
    其他更小类型的运算在字节码中是转换为int来处理的,
    也就是说运算结果在字节码中至少是一个int,
    必须在代码中明确申明你需要的更小范围的结果类型喵~~``
      

  4.   

    java核心技术中有这样一句话:
    当使用数值进行二元操作时(+, -, *, /),先要将两个操作数转换为同一类型,然后再进行运算。
    1.如果两个操作数中有一个是double类型的,另一个操作数就会转换为double类型。
    2.否则,如果其中一个操作数是float类型的,另一个操作数将会转换为float类型。
    3.否则,如果其中一个操作数是long类型的,另一个操作数将会装换为long类型。
    4.否则,两个操作数都将转换为int类型。所以,b = c + d; c和d都将转换为int类型的再参加运算,所以结果是int类型的,再复制给b是byte类型的,所以就出错了,要强制类型转换。
    s = s + c; 也是一个道理,最后要将结果int类型转换为short类型,所以就出错了,要强制类型转换。b = (byte) (c + d);s = (short) (s + c);
    不知道说得对不对
      

  5.   

    b = b + 1也是同样的问题啊,
    b = (byte) (b + 1);就好了啊
      

  6.   

    问问各位:byte b = 0;
    b = b + 1; //出错,知道原因
    b += 1; // 正确,为什么
    望高手指点,谢谢。
      

  7.   

    编译系统会把2个低于int类型的整形变量的运算结果类型转换给int类型的。所以,在2各相加求和的地方报错了。
    但是在自加减本身加减的时候不会发生类型跃迁。请楼主注意。如果确实想得到byte类型,那么只能显示类型转换了。
      

  8.   

    b = b + 1; //出错,知道原因 
    b += 1; // 正确,为什么 b = b + 1; 需要强制转换才能编译
    b += 1;  这个是赋值
      

  9.   

    答:+ 运算符的解释在 5楼 已很完备了. 
    因此:  b=b+1;是先将b转成int类型,b+1之后是int ,因而将int 的b+1赋值给byte的b,当然要出错了.+= 运算符是什么含义? 实际上,任何op=运算符的含义是: a op= b 是: a=(T)(a op b);其中T是a的类型.
    因此:  b += 1;其实就是: b = (byte)(b + 1); 当然正确了