Java中,
byte b1=0;
正确
byte b2=127;
正确
short s1=b1+b2;为什么会报错呢
java中默认的整数为int类型,浮点为double类型,但是定义赋值的时候针对float
都是整型参与的运算都要首先自动转换int再参与运算(除非有long类型参与则都转成long或者有浮点型参与运算则转成浮点型再参与运算),你这里s1=b1+b2,b1和b2首先自动转成int,再做+运算,再赋值给s1,这时就是int型赋值给short,大的赋值给小的不加强制转换就会报错。
1,隐性转换一般都是放宽转换(如byte到int,int到long等,都是小的赋给大的。)
但是却有一个例外就是,在赋值转换中,
隐性转换也包含了缩窄基本转换。
就是从int到byte,char,short的转换:
比如:
byte b=1;//合法
byte b=128; //非法
char和short都是同理的。
右边必须为int型字面常量,而且值必须能被左边类型表示
2,单纯是都是整型数据参与的运算都要转换为int类型,除非非有long类型参与运算则转换为long,或者有浮点类型参与运算的话都转成浮点类型。
单纯的浮点类型float类型参与运算不用转成double,除非有double类型参与运算才转成double。