问题描述
- 关于自动提升int类型疑问?
-
byte b1= 1;
byte b2 =2;
byte b3 =b1+b2;
这种编译为什么会报错,求指导?
解决方案
当使用+、-、*、/、%运算符对基本类型进行运算时,遵循如下规则:
只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;
否则,只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;
否则,只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;
否则,两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。
当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则:
运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符左边数值类型相同。
比如上面 b3+=b1;b3+=b2;这样都是没问题的。
解决方案二:
b1,b2相加后可能超过byte范围。
解决方案三:
byte 只能是0 或是1 吧?
解决方案四:
以下的代码会不会报错呢?
byte b1= 1;
byte b2 =2;
byte b3 =(byte)(b1+b2);
解决方案五:
编译器这么规定的。
byte b3 =(byte)((b1+b2)%256);
解决方案六:
b1+b2只能用整数来接收,而整数到byte不能隐式转换。还有那个说byte只能是0和1的,实在太扯了。
时间: 2024-08-13 07:15:44