代码如下: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的时候都报错!请问怎样解决?
谢谢!
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的时候都报错!请问怎样解决?
谢谢!
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型
对整个结果强转,java中所以低于int型的四则运算,都需要对结果强制转型.记得有位csdn强人分析过,
java四则运算的最小单位是int,
其他更小类型的运算在字节码中是转换为int来处理的,
也就是说运算结果在字节码中至少是一个int,
必须在代码中明确申明你需要的更小范围的结果类型喵~~``
当使用数值进行二元操作时(+, -, *, /),先要将两个操作数转换为同一类型,然后再进行运算。
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);
不知道说得对不对
b = (byte) (b + 1);就好了啊
b = b + 1; //出错,知道原因
b += 1; // 正确,为什么
望高手指点,谢谢。
但是在自加减本身加减的时候不会发生类型跃迁。请楼主注意。如果确实想得到byte类型,那么只能显示类型转换了。
b += 1; // 正确,为什么 b = b + 1; 需要强制转换才能编译
b += 1; 这个是赋值
因此: 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); 当然正确了