1 表达式中的自动类型提升:
表达式求值时,Java自动的隐含的将每个byte
、short
或char
操作数提升为int
类型,这些类型的包装类型也是可以的。
例如:
short s1 = 1;
s1 = s1 + 1;
s1+1运算中的操作数s1会被自动提升为int类型
,s1+1运算结果会成为int
类型,再赋值给short
类型的s1时,编译器会报告需要强制转换类型
的错误。需要改为short s1=1; s1=(short)(s1+1);结果就是short
类型。
例如:
short s1 = 1;
s1 += 1;
+=
是java语言中的运算符,Java编译器会对它特殊处理进行正确的编译。
2 类型提升规则:
(1)byte
、short
和char
类型的值都被提升为int
类型;
(2)如果有一个操作数是long
类型,就将整个表达式提升为long
类型;
(3)如果有一个操作数是float
类型,就将整个表达式提升为float
类型;
(4)如果任何一个操作数为double
类型,结果将为double
类型。
例如:
byte b=1;
char c='a';
short s=1024;
int i=50;
float f=2.0f;
double d=.123;
double result = (f * b) + (i / c) - (d * s);
//f*b中,b被自动提升为float类型,该表达式结果是float类型;
//i/c中,c被自动提升为int类型,该表达式结果是int类型;
//d*s中,s被自动提升为doubl类型,该表达式结果是double类型;
//最后,float+int-double,结果会被提升为double类型,double类型为最后结果result的类型。