1. 所有byte型、short型和char型将被提升到int型。
2. 整个算术表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的等级排列如下图所示,位于箭头右边类型的等级高于位于箭头左边类型的等级。

下面程序示范了一个典型的错误:
//定义一个short类型变量
short sValue
= 5;
//表达式中的sValue将自动提升到int类型,则右边的表达式类型为int
//将一个int类型赋给short类型的变量将发生错误。
sValue
= sValue
- 2;
下面代码是表达式类型自动提升的正确示例代码(程序清单同上):
byte b
= 40;
char c
= 'a';
int i
= 23;
double d
= .314;
//右边表达式中在最高等级操作数为d(double型)
//则右边表达式的类型为double型,故赋给一个double型变量
double result
= b
+ c + i
* d;
//将输出144.222
System.out.println(result);
必须指出的,表达式的类型将严格保持和表达式中最高等级操作数相同的类型,下面代码中两个int整数进行除法运算,即使无法除尽,也将得到一个int结果(程序清单同上):
int val
= 3;
//右边表达式中2个操作数都是int,故右边表达式的类型为int
//因此,虽然23/3不能除尽,依然得到一个int整数
int intResult
= 23
/ val;
//将输出7
System.out.println(intResult);如果表达式中包含了字符串,则又是另一番情形了:因为把加号(+)放在字符串和基本类型值之间时,这个加号是一个字符串连接运算符,而不是进行加法运算。看如下代码:
//输出字符串Hello!a7
System.out.println("Hello!"
+ 'a'
+ 7);
//输出字符串104Hello!
System.out.println('a'
+ 7
+ "Hello!");
1972



被折叠的 条评论
为什么被折叠?



